2013-09-03 13 views
6

を操作getWritableDatabase()毎回を呼び出す必要がありますか:は私がアンドロイドでSQLiteのデータベースについて初心者の質問があり、私はデータ

私は本当に私がデータを操作する書き込み可能なデータベース毎回を取得する必要がありますか?

だから私はこのようなDAO書くことができます。

class Dao { 

     private final SQLiteDatabase database; 

     public Dao(SQLiteOpenHelper databaseHelper){ 

      database = databaseHelper.getWritableDatabase(); 
    } 

    public void insert(...){ 

     ContentValues cv = new ContentValues(4); 
     database.insertOrThrow(TABLE, null, cv); 
     ... 
    } 


    public void update(...){ 
     ContentValues cv = new ContentValues(4); 
     database.update(....); 
    } 
} 

または私はこのように私のDAOを記述する必要があります実行します。第二のアプローチが正しいものである場合

class Dao { 

     private final SQLiteOpenHelper databaseHelper; 

     public Dao(SQLiteOpenHelper databaseHelper){ 

      this.databaseHelper = databaseHelper 
    } 

    public void insert(...){ 

     SQLiteDatabase database = databaseHelper.getWritableDatabase(); 
     ContentValues cv = new ContentValues(4); 
     database.insertOrThrow(TABLE, null, cv); 
     ... 
    } 


    public void update(...){ 
     SQLiteDatabase database = databaseHelper.getWritableDatabase(); 
     ContentValues cv = new ContentValues(4); 
     database.update(....); 
    } 
} 

を: ない私も

public void update(...){ 
    SQLiteDatabase database = databaseHelper.getWritableDatabase(); 
    ContentValues cv = new ContentValues(4); 
    database.update(....); 
    database.close(); 
} 

私はそれが01と同じであると推測します?

答えて

9

開いているすべてのカーソルを閉じる必要があります。ただし、データベースインスタンスは、使用するたびに終了する必要はありません。

通常、書き込み可能なデータベースをonCreate()にフェッチし、その結果のSQLiteDatabaseを各アクティビティのメンバー変数として保存し、そのインスタンスを明示的に閉じることはありません。 (ただし、結果を処理するとすぐにすべてのカーソルを閉じることになります)

もう少し詳しくは、Managing SQLite Connections in Androidを参照してください。

+1

私はすべてのアクティビティでそれをしたくありません。だから、私はアプリケーションをサブクラス化し、Dao(より具体的にはSQLiteOpenHelper)が一度しかインスタンス化されないようにするために、シングルトンのようなものを実装します。 – sockeqwe

+0

@sockeqwe:あなたは静的としてアプリケーションに入れても構いませんが、 。また、テスト活動をより困難にするでしょう。しかし、あなたが良い慣行や正式なコードテストを気にしなければ、それはうまくいくかもしれません。あなたのコードのどれもが接続を閉じていないことを確認してください。そうでなければ、断続的に接続を取得できないアクティビティーがいくつあるのかはわかりません。 (それが悪い習慣である理由の1つです)。 –

関連する問題