0

DBHelper.java

public class DBHelper extends SQLiteOpenHelper{

    public DBHelper(Context context) {
        super(context, DBConstants.DATABASE_NAME, null,DBConstants.DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(DBConstants.CREATE_LOGINTABLE);
        db.execSQL(DBConstants.CREATE_DATA_TABLE);
        db.execSQL(DBConstants.CREATE_LATEST_DATA_TABLE);
        db.execSQL(DBConstants.CREATE_ALERTS_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(DBConstants.DELETE_LOGINTABLE);
        db.execSQL(DBConstants.DELETE_DATA_TABLE);
        db.execSQL(DBConstants.DELETE_LATEST__DATA_TABLE);
        db.execSQL(DBConstants.DELETE_ALERTS_TABLE);
        onCreate(db);
    }

    @Override
    public synchronized void close() {
        super.close();
    }
}

Class1(アプリケーションの私のアクティビティまたはフラグメントの1つ):

DBHelper myDbHelper=new DBHelper(context);
SQLiteDatabase myDB = myDbHelper.getWritableDatabase();

Cursor c1= myDB.query(DBConstants.LATEST_DATA_TABLE,mycolumns, null, null, null, null, null);
  /* is it correct */
c1.close();
myDB.close();
myDbHelper.close();
/* is it correct */

Class2(アプリケーションの私のアクティビティまたはフラグメントの1つ):

DBHelper myDbHelper=new DBHelper(context);
SQLiteDatabase myDB = myDbHelper.getWritableDatabase();

Cursor c1= myDB.query(DBConstants.LATEST_DATA_TABLE,mycolumns, null, null, null, null, null);

/* is it correct */
c1.close();
myDB.close();
myDbHelper.close();
/* is it correct */

ここで、すべてのc1、myDB、myDbHelperオブジェクトを閉じるか、c1を閉じてmyDbHelperで十分ですか?ベストプラクティスはどれですか?

4

1 に答える 1

1
  • myDbHelper.close()データベースを内部的に閉じます。したがって、を呼び出す必要はありませんmyDb.close
  • そしてもちろん、c1.close()それに慣れたいベストプラクティスです。

コード:

try {
    //your database queries.
} catch (...) {

} finally {
    if (cursor != null && !cursor.isClosed()) {
        c1.close();
    }
    myDbHelper.close();
}

finallyブロックは、これらのリソースが何が起こっても解放されることを確認します。

于 2012-12-25T09:50:11.640 に答える