【问题标题】:Is it better to use Update or execSQL to update data on SQLite?使用 Update 或 execSQL 更新 SQLite 上的数据更好吗?
【发布时间】:2018-05-10 19:48:27
【问题描述】:

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

【问题讨论】:

  • 我无法使用 rawQuery/execSQL 在数据库事务中执行更新/插入/删除。我总是不得不使用方便的方法。

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


【解决方案1】:

关于使用 execSQL 的问题/警告可能有几个原因,其中之一是使用 execSQL 时您没有得到任何返回,而便利方法返回可能有用的值。

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

使用便捷的方法还可以通过构建底层 SQL、添加关键字和封闭字符串以及提供一定程度的 SQL 注入保护(execSQL's bindArgs 还提供针对 SQL 注入的保护,rawQuery 也是如此。

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

【讨论】:

  • 如果你要使用其中一种,你会选择哪一种,为什么?
  • 方便的方法。
  • 所以,我必须介绍一下这些方法。你认为我可以说“我们可以使用 execSQL,但 Android 的官方文档说我们应该使用官方方法(更新/删除/...)”?
猜你喜欢
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 2015-04-18
  • 2012-01-04
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多