使用Update或execSQL更新SQLite上的数据是否更好?

时间:2018-05-10 19:48:27

标签: android database sql-update android-sqlite sp-executesql

我在教程中看到了使用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

enter image description here

使用 execSQL 的代码有效,但最好使用更新,否则我仍然可以使用 execSQL ,因为它有效?良好做法有什么好处?由于本教程来自可信赖的来源,为什么他们使用 execSQL

1 个答案:

答案 0 :(得分:0)

有关使用execSQL的问题/警告可能有几个原因,其中一个原因是在使用execSQL时没有返回任何内容,而便捷方法会返回潜在有用的值。

insert将返回一个long,其中包含插入行的id,否则为-1。  updatedelete会返回受影响的行数。

使用便捷方法还可以通过构建底层SQL,添加关键字和封闭字符串以及为一些重要的提供针对SQL注入的保护级别(execSQL'来减少输入错误的机会。   bindArgs 还提供针对SQL注入的保护,同样使用rawQuery)。

但是,有一些限制,有时在某些更复杂的情况下使用execSQL / rawQuery是必要的。