在android中,SQLiteDatabase具有更新功能
SQLiteDatabase
update(String table, ContentValues values, String whereClause, String[] whereArgs)
放入新值values 如果要通过向列A中添加列来更新列A,应如何准备ContentValues values变量?我认为以下方法无效。
values
cv.put("A", "A" + 1);
我可以确定execSQL使用原始sql运行,但是它不返回更新的行数
execSQL
如果要执行原始查询,则应执行以下类似操作以增加列中的当前值:
UPDATE table_name SET column_a = column_a + 1 WHERE _id = 1
(这里1仅是一个示例,以说明如何将其应用于特定的行)
1
可能无法使用相同的功能ContentValues,因为(如名称所示)它需要使用将列设置为的值。这意味着在构建之前需要先对其进行评估ContentValues,而对于原始查询,只有在查询实际在数据库上运行后,该值才会被评估。
ContentValues
当然,您可以先获取当前值,然后在发布更新时相应地增加该值。首先需要选择查询。不过,通常是在Java中使用对象,其中行的列值绑定到对象的成员字段。如果您具有这样的设置,则您可能要运行更新查询时已经具有当前值。
这样,它看起来就像:
SomeObject object = ...; cv.put("column_a", object.getSomeValue() + 1);
(我假设object.getSomeValue()将返回int)
object.getSomeValue()
int
//编辑:这是原始查询方法的更多示例:
// edit2:您已经编辑了原始问题并添加了:
如果必须知道 要 更改查询的行数,则可以潜在地利用该changes()功能。尽管如此,这仍然意味着您将不得不运行第二个查询。
changes()
SELECT changes() FROM table_name
文档说:
changes()函数返回由最近完成的INSERT,DELETE或UPDATE语句更改,插入或删除的数据库行数,不包括低级触发器中的语句。changes()SQL函数是sqlite3_changes()C / C ++函数的包装,因此遵循相同的计数变化规则。
另外,您可以调查rawQuery()采用SQL语句并以形式返回结果的方法Cursor。不知道它是否甚至可以用于更新查询,或者不确定结果是否有意义,但是如果您真的很幸运,您可能会发现它Cursor.getCount()为您带来了受影响的行数。
rawQuery()
Cursor
Cursor.getCount()