2

我想执行一个语句,例如

UPDATE myTable SET myField = myField + 1

在 Android SQLite 数据库中。(是的,我想为所有记录增加 myField。)

我的第一个想法是使用execSQL,但文档说:

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

...

对于 UPDATE 语句,请改用以下任何一种。
• update(String, ContentValues, String, String[])
• updateWithOnConflict(String, ContentValues, String, String[], int)

但是,据我所知,这种类型的 UPDATE 不能用SQLiteDatabase.update方法来完成。我是否错过了一些巧妙的技巧来做到这一点,SQLiteDatabase.update或者文档是否损坏?(使用 execSQL 运行上述 SQL 可以正常工作,尽管文档另有声明。)

4

2 回答 2

2

那个方法刚刚好。必须如此,因为底层 C API 无法区分这些。任何不返回值的语句都可以用execSQL.

update* 和* 是合法的insert辅助方法,但是如果文档没有声称必须将它们用于所有插入/更新,那么文档确实会做得更好,因为它们根本不能(曾经使用过insert into table select ...?我一直都这样做!)

于 2012-11-06T15:02:45.880 回答
1

在这种execSQL情况下会正常工作,因为它什么都不返回。我在我的一个应用程序中将它用于相同的目的,但我从未遇到过问题。

于 2012-11-06T15:16:28.330 回答