0

コード全体で、以下の 2 つのようなデータベースの更新があります。私の更新のほとんどは、レコードを更新する前に最初にデータベースを開き、レコードが更新された後にデータベースを閉じます。次のステートメントを使用していないことに気付きました: mDb = Helper.getWritableDatabase(); 挿入とこのステートメントの前: mDb.close(); 挿入後、強制終了エラーが発生することがありますが、常にではありません。適切な方法は何ですか。open ステートメントと close ステートメントを常に使用するか、更新プロセス中に常に開いてから閉じる必要があるか、または閉じる必要がある場合にのみ使用しますか? 適切なテクニックは何ですか。open close ステートメントを含むスニペットを次に示します。前もって感謝します。オープンステートメントは必要ですか?

            // Open connections to the database
            mDb = Helper.getWritableDatabase();             

            // update 1
            String strFilter7 = "_id=" + 7;
            ContentValues args7 = new ContentValues();
            args7.put(COL_VALUE, newB1ftgvalue);
            mDb.update("VarData", args7, strFilter7, null);

             // update 2
            String strFilter11 = "_id=" + 11;
            ContentValues args11 = new ContentValues();
            args11.put(COL_VALUE, newB2ftgvalue);
            mDb.update("VarData", args11, strFilter11, null);

            // closes database
            mDb.close();    
4

3 に答える 3

2

それを閉じないでください、そして、1つのsqliteヘルパーだけを持ってください。基本的には静的なopenhelperです。データベースを閉じなくても問題はありません。このリンクは、うまく機能する優れたコードを提供します。開いているデータベースでメモリリークが発生することはありません。ただし、カーソルを開くと問題が発生するため、必ずカーソルを閉じてください。

http://www.touchlab.co/blog/single-sqlite-connection/

良い議論はここにあります: Android上のSQLiteのベストプラクティスは何ですか?

投稿したリンクは、最初に見たときから変わっていることに気づきました。変化する:

instance = new DatabaseHelper(context);

instance = new DatabaseHelper(context.getApplicationContext());

public class DatabaseHelper extends OrmLiteSqliteOpenHelper

public class DatabaseHelper extends SqliteOpenHelper
于 2012-04-18T22:06:44.960 に答える
2

データベースの更新が完了したら、必ず close() を呼び出すことをお勧めします。データベースを閉じていない場合、エラーが表示されることがあります。データベースが開いたら、複数の更新を行うことができます。それは問題ではありません。注意すべきことの 1 つは、さまざまな理由から、接続を長時間開いたままにしない方がよいということです。ここでは、このトピックに関する良い議論があります。

于 2012-04-18T21:51:28.930 に答える
1

データを変更するには、データベースを書き込み可能なデータベースとして開く必要があるため、レコードを更新する前にデータベースを開く必要があります。

于 2012-04-18T22:22:36.200 に答える