在 SQLite 上更新数据是使用 Update 还是 execSQL 更好?

Is it better to use Update or execSQL to update data on SQLite?

我在教程中看到了使用 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 的代码有效,但最好使用 update 或者我仍然可以使用 execSQL 因为它有效?什么对良好实践更好?由于本教程来自可靠来源,为什么他们使用 execSQL

关于使用 execSQL 的 issue/warning 可能有几个原因,其中之一是您在使用 execSQL 时没有得到任何 returned,而便捷方法 return 可能有用的值。

insert 将 return 包含插入行的 ID 的 long else -1。 updatedelete return 受影响的行数。

使用方便的方法还可以通过构建底层 SQL、添加关键字和封闭字符串来减少输入错误的机会,并且对于一些重要的提供一定程度的保护以防止 SQL 注入( execSQLbindArgs 还提供针对 SQL 注入的保护,与 rawQuery) 类似。

但是,存在局限性,有时在某些更复杂的情况下需要使用 execSQL/rawQuery。