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();
}
}
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 */
第2類(我的活動或片段中的一個應用):
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就夠了嗎?最佳做法是什麼?
此外,如果我初始化DBHelper和光標在AsyncTask或加載程序,並獲得結果作爲光標,然後在那裏我關閉我的DBHelper對象。因爲Cursor對象在Async Task或Loader中使用。 – Ramprasad
第一:DBHelper應該是一個單身人士。 秒:在使用光標後總是關閉DBHelper。因爲遊標需要打開數據庫連接,直到獲得所需的全部內容。 因爲DBHelper是一個單身人士,所以你應該可以從任何線程在任何地方調用它的close()方法。 – kdehairy