2012-12-24 42 views
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就夠了嗎?最佳做法是什麼?

回答

1
  • myDbHelper.close()在內部關閉數據庫。所以不需要撥打myDb.close
  • 當然,c1.close()是您希望習慣的最佳實踐。

代碼:

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

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

finally塊將確保這些資源被釋放不管發生什麼事。

+0

此外,如果我初始化DBHelper和光標在AsyncTask或加載程序,並獲得結果作爲光標,然後在那裏我關閉我的DBHelper對象。因爲Cursor對象在Async Task或Loader中使用。 – Ramprasad

+1

第一:DBHelper應該是一個單身人士。 秒:在使用光標後總是關閉DBHelper。因爲遊標需要打開數據庫連接,直到獲得所需的全部內容。 因爲DBHelper是一個單身人士,所以你應該可以從任何線程在任何地方調用它的close()方法。 – kdehairy

相關問題