我有一个带有SQLite数据库的应用程序;打开一个Cursor后,用以下查询获取一些数据:
SELECT * FROM table_name WHERE id=42;
是否需要在运行如下命令之前关闭游标:
UPDATE table_name SET column = datetime('now') WHERE id=42;
会影响打开Cursor中的行吗?
答案 0 :(得分:1)
这应该很容易测试自己。
UPDATE
语句将运行,但现有Cursor中的数据将过时。一般规则是在完成Cursor时关闭Cursor,如果使用Loader
s现有游标应在源数据更改时刷新。
答案 1 :(得分:1)
不,您可以打开游标,对所选行执行一些更新,然后关闭游标(在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();
注意:对所选表的更新不会影响已打开游标的(值)。