0

SQLite DB を作成しました。私のDBから読み書きするのは問題ありません。私の DBHandler.class では、たとえば 1 つの列を読み取るメソッドをいくつか追加しました。すべてのメソッドには dbHandler.close() 行があります。DBHandler.class からメソッドを呼び出したい場合は、次のようにする必要があります。 ... DBHandler db = new DBHandler(this); ... list = db.getAllBlock()

?????の db.close() 後 に行を入れるべきですか ? list...それを理解するのは私の問題です....ありがとう!

4

1 に答える 1

1

何かを行うたびに常にデータベースに再接続する必要があるのは非効率的です。そのため、各行から close() ステートメントを削除し、DB ハンドラー クラスの単一のインスタンスを作成します。

単一の DBHandler を持つ方がはるかに優れています

DBHandler db;

public Activity/Class Constructor()
{
     DBHandler db = new DBHandler(this);
}

private void DoSomethingWithDatabase()
{
   db.doSomethingHere();
}

private void DoSomethingWithDatabaseAgain()
{
   db.doSomethingThere();
}

public void Activity/ClassClose()
{
    db.CloseDatabase();
}

アクティビティ/クラスがそれを使用しているインスタンス内で、アクティビティ/クラスがそれを使用し終わった後にデータベースへの接続を閉じる DBHandler に close メソッドがあります。

public class DBHandler
{  
    private static SQLiteDatabase m_DB;

    public DBHandler open() throws android.database.SQLException
    {
        m_DB = m_DBHelper.getWritableDatabase();
    }

    public void doSomethingHere()
    {
       m_DB.getAllBlock()
    }

    public void doSomethingThere()
    {
       m_DB.getAllSomethingElse()
    }

    public void CloseDatabase()
    {
       m_DB.close();
    }
}

実際、DBHandler を Singleton として使用すると、必要なたびに接続を再確立するという非効率的なオーバーヘッドなしで、アプリケーション全体のデータベース アクセスを行うことができます。

于 2013-04-07T15:06:22.117 に答える