SQLite データベースを含むアプリがあります。Cursor を開いて、次のようなクエリでデータを取得した後:
SELECT * FROM table_name WHERE id=42;
次のようなコマンドを実行する前に、カーソルを閉じる必要がありますか?
UPDATE table_name SET column = datetime('now') WHERE id=42;
開いているカーソルの行に影響を与えますか?
SQLite データベースを含むアプリがあります。Cursor を開いて、次のようなクエリでデータを取得した後:
SELECT * FROM table_name WHERE id=42;
次のようなコマンドを実行する前に、カーソルを閉じる必要がありますか?
UPDATE table_name SET column = datetime('now') WHERE id=42;
開いているカーソルの行に影響を与えますか?
これは、自分自身をテストするのに十分簡単なはずです。ステートメントは実行されますが、既存のカーソル内のデータは古くなっています
。UPDATE
一般的なルールは、使用が終了したら Cursor を閉じることです。既存の Cursor を使用する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();
注: 選択したテーブルの更新は、開いているカーソル (の値) には影響しません。