1

すべてのデータベースアクセスを行うクラスがあります。SQLiteDatabaseへの参照を保持します。30個ほどの関数は次のようになります。

public boolean updateSomething(long a, int b, long c) {
    ContentValues values = new ContentValues();
    values.put(COL_A, a);
    ...
    return database.update(TABLE, values, COL_ID + "=?", new String[]{id}) > 0;
}

多くのStackOverflowsは、次のようにすることを提案しています。

public boolean updateSomething(long a, int b, long c) {
    SQLiteDatabase database = dbHelper.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(COL_A, a);
    ...
    boolean success = database.update(TABLE, values, COL_ID + "=?", new String[]{id}) > 0;
    database.close();
    return success;
}

しかし、データベースの10k行にカーソルが必要であり、配列にカーソルをコピーしてデータベースを閉じることができないため、カーソルを返す関数もあります。

でデータベースを開いてonResume閉じると言う人もいますが、それonPauseはデータベースコードをアクティビティに移動するか、これらすべての関数のパラメータとしてデータベースを使用することを意味します。次に、アクティビティと並行して実行されるAsyncTasksおよびその他のクラスについてどうしますか。

私のアプローチは、メインのアクティビティでデータベースを開き、破棄時にデータベースを閉じることでした。その後、データベースが複数回作成される可能性があることに気付いたので、インスタンスをカウントしました。次に、別のアクティビティがデータベースの所有に依存しているときに、データベースが破壊される可能性があることに気付きました。アプリケーションには、データベースに接続して閉じるために使用できるonStart/Stopコールバックがありません。

Androidの場合:クラスからアクティビティに戻るカーソルを閉じる方法は、データベースをわざわざ閉じないことをお勧めします。それは賢明な動きですか?それが私が始めた方法であり、LogCatは私に心配して上記のことをさせてくれました。一部のログ出力以外にデータベースを閉じないことの欠点は何ですか?

4

1 に答える 1

0

すべてのデータベース ジョブを処理する静的シングルトン db アクセス クラスはどうでしょうか。次に、破棄時に (または適切な場合に) 静的メソッドを呼び出して、接続を閉じることができます。

于 2013-02-06T13:51:44.380 に答える