我在教程中看到了使用execSQL从SQlite数据库更新数据的代码:
String update = "UPDATE FRUIT SET COLOR=? WHERE ID=?";
myDatabase.execSQL( update, new Object[] {"RED", 7});
Cursor cursor = myDatabase.rawQuery("SELECT * FROM FRUIT;", null);
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex("NAME"));
String color = cursor.getString(cursor.getColumnIndex("COLOR"));
Log.i(TAG, "onCreate: Name: " + name + ", color: " + color);
} while (cursor.moveToNext());
}
但是,我在Android的官方文档中阅读了this:
使用 execSQL 的代码有效,但最好使用更新,否则我仍然可以使用 execSQL ,因为它有效?良好做法有什么好处?由于本教程来自可信赖的来源,为什么他们使用 execSQL ?
答案 0 :(得分:0)
有关使用execSQL
的问题/警告可能有几个原因,其中一个原因是在使用execSQL时没有返回任何内容,而便捷方法会返回潜在有用的值。
insert
将返回一个long,其中包含插入行的id,否则为-1。
update
和delete
会返回受影响的行数。
使用便捷方法还可以通过构建底层SQL,添加关键字和封闭字符串以及为一些重要的提供针对SQL注入的保护级别(execSQL
'来减少输入错误的机会。
bindArgs 还提供针对SQL注入的保护,同样使用rawQuery
)。
但是,有一些限制,有时在某些更复杂的情况下使用execSQL / rawQuery是必要的。