我有一个带有 SQLite 数据库的应用程序;在打开游标以使用以下查询获取一些数据后:
SELECT * FROM table_name WHERE id=42;
在运行这样的命令之前是否有必要关闭光标:
UPDATE table_name SET column = datetime('now') WHERE id=42;
这会影响打开光标中的行吗?
我有一个带有 SQLite 数据库的应用程序;在打开游标以使用以下查询获取一些数据后:
SELECT * FROM table_name WHERE id=42;
在运行这样的命令之前是否有必要关闭光标:
UPDATE table_name SET column = datetime('now') WHERE id=42;
这会影响打开光标中的行吗?
这应该很容易测试自己。
该UPDATE
语句将运行,但现有光标中的数据将过时。一般规则是在完成后关闭游标,如果使用现有游标Loader
,则应在源数据更改时刷新。
不,您可以打开游标,对选定的行执行一些更新,然后关闭游标(之前db.close()
)。样本:
Cursor cursor = db.rawQuery("SELECT id, ...");
if (cursor != null && cursor.moveToFirst()) {
int id = cursor.getLong ("id");
ContentValues values = new ContentValues();
values.put("id", id +1000);
values.put("name", name);
db.update(DATABASE_TABLE, args, "id=" + id, null);
}
cursor.close();
注意:对选定表的更新对打开的游标(的值)没有影响。