【问题标题】:Must I use execSQL for update with expression when working with SQLite on Android?在 Android 上使用 SQLite 时,我必须使用 execSQL 来更新表达式吗?
【发布时间】:2016-05-07 19:55:52
【问题描述】:

所以我的问题是这样的。

在现有的 android 框架中,有什么方法可以使用 ContentValues 执行 UPDATE,其中 SET 值为 表达式

现在我想要实现的是 SQL 更新,其中一列更新为其他两列的值,如下所示:

UPDATE myTable SET columnA = columnB + columnC WHERE rowId = 5

这行得通,没问题。但是我看不到任何使用 ContentValues 和 android 文档 explicitly says 的方法:

void execSQL(String sql, Object[] bindArgs)

执行不是 SELECT/INSERT/UPDATE/DELETE 的单个 SQL 语句。

...

对于 UPDATE 语句,请改用以下任何一种。

更新(字符串,内容值,字符串,字符串[])

updateWithOnConflict(String, ContentValues, String, String[], int)

那么是否可以使用现有的更新方法来完成,还是我将不得不忽略文档并继续使用 execSQL?

【问题讨论】:

  • 我不知道文档为什么这么说。查看the source code,因为他们对所有内容都使用绑定参数,所以我看不出您如何使用所需的表达式。
  • 像往常一样,一旦我放弃查看问题并在此处发布问题,我在 SQLiteDatabase.compileStatement 中找到了一个潜在的解决方案。如果可行,我会更新。
  • rawQuery() 用于查询(SELECT),将execSQL() 用于命令(其他)。

标签: android sqlite


【解决方案1】:

好的,我会把这个留给像我一样盲目并错过显而易见的人的人:

您可以随意使用 SQliteDatabase.compileStatement(String) 或 as Bob Malooga 非常友好地指出使用 SQLiteDatabase.rawQuery (String, String[])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 2013-10-05
    相关资源
    最近更新 更多