gpt4 book ai didi

android根据当前列值更新数据库列

转载 作者:太空狗 更新时间:2023-10-29 16:39:38 25 4
gpt4 key购买 nike

在android中,SQLiteDatabase有更新功能

update(String table, ContentValues values, String whereClause, String[] whereArgs)

新值放入 values
如果我想通过添加一个来更新列 A,我应该如何准备 ContentValues 值变量?我认为以下方法行不通。

cv.put("A", "A" + 1);

我可以确定使用原始 sql 运行 execSQL,但它不会返回已更新的行数

最佳答案

如果您要执行原始查询,像这样的操作应该可以增加列中的当前值:

UPDATE table_name SET column_a = column_a + 1 WHERE _id = 1

(其中 1 只是一个示例,用于说明如何将其应用于特定行)

同样的方法可能不适用于 ContentValues,因为(正如名称所示)它采用值来设置列。这意味着它需要在构建 ContentValues 之前进行评估,而对于原始查询,直到查询实际在数据库上运行时才会评估值。

您当然可以先检索当前值,然后在发布更新时相应地增加该值;首先需要一个选择查询。但很常见的是,您在 Java 中使用对象,其中行的列值绑定(bind)到对象的成员字段。如果您有这样的设置,那么在您想要运行更新查询时您可能已经有了当前值。

因此,它看起来有点像:

SomeObject object = ...;
cv.put("column_a", object.getSomeValue() + 1);

(我假设 object.getSomeValue() 将返回一个 int)


//编辑:这里是原始查询方法的更多示例:


//edit2:您已编辑原始问题并添加:

I can sure run execSQL with raw sql, but it does not return num of row updated

如果知道查询更改了多少行是必须,那么您可以潜在地利用changes() 函数。不过,这仍然意味着您将不得不运行第二个查询。

SELECT changes() FROM table_name

文档说:

The changes() function returns the number of database rows that were changed or inserted or deleted by the most recently completed INSERT, DELETE, or UPDATE statement, exclusive of statements in lower-level triggers. The changes() SQL function is a wrapper around the sqlite3_changes() C/C++ function and hence follows the same rules for counting changes.

或者,您可以查看 rawQuery()接受 SQL 语句并将结果作为 Cursor 返回的方法。不确定它是否适用于更新查询,或者结果是否合理,但如果你真的很幸运,你可能会发现 Cursor.getCount() 为你提供了受影响的行。

关于android根据当前列值更新数据库列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20136146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com