0

SQLite データベースを含むアプリがあります。Cursor を開いて、次のようなクエリでデータを取得した後:

SELECT * FROM table_name WHERE id=42;

次のようなコマンドを実行する前に、カーソルを閉じる必要がありますか?

UPDATE table_name SET column = datetime('now') WHERE id=42;

開いているカーソルの行に影響を与えますか?

4

2 に答える 2

1

これは、自分自身をテストするのに十分簡単なはずです。ステートメントは実行されますが、既存のカーソル内のデータは古くなっています
UPDATE一般的なルールは、使用が終了したら Cursor を閉じることです。既存の Cursor を使用するLoader場合は、ソース データが変更されたときに更新する必要があります。

于 2013-04-12T17:55:29.137 に答える
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();

注: 選択したテーブルの更新は、開いているカーソル (の値) には影響しません。

于 2013-04-12T17:55:32.217 に答える