一直以來使用Sqlite開關方面,一直出現問題譬如以下錯誤畫面
05-04 14:14:50.870: E/AndroidRuntime(7173): java.lang.IllegalStateException: database /data/data/etwarm.namespace/databases/Super_data.db (conn# 0) already closed
或
close() was never explicitly called on database
等等等...........
這類的錯誤(close訊息)都只是上個db沒有關閉又開了一次,譬如開了一次getReadableDatabase()又再開了一次getReadableDatabase(),這樣在DDMS就會看到錯誤訊息,雖然不至於影響整個應用程序,但看到錯誤訊息心理就不是很舒服。
個人在程序上的方式如下,自己筆記一下。
//這個應用程序有使用2個db,先在最上頭宣告為null值
private DBOpenHelper dbHelper=null;
private Customer_DBOpenHelper customer_dbHelper=null;
SQLiteDatabase db=null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//宣告
dbHelper = new DBOpenHelper(this);
customer_dbHelper = new Customer_DBOpenHelper(this);
}
//使用2個public,當dbHelper開時,customer_dbHelper就關,customer_dbHelper要開時dbHelper就關
public void db_help_open(){
if(customer_dbHelper!=null){customer_dbHelper.close();}
db = dbHelper.getReadableDatabase();
}
public void customer_db_help_open(){
if(dbHelper!=null){dbHelper.close();}
db = customer_dbHelper.getReadableDatabase();
}
//當離開畫面時呼叫all_cursor_db_close()這個自己寫的方法
public void onPause() {
// TODO Auto-generated method stub
all_cursor_db_close();
super.onPause();
}
//把他全部關閉
public void all_cursor_db_close(){
if(cursor!=null){cursor=null;}
if(customer_dbHelper != null){customer_dbHelper.close();}
if(dbHelper != null){dbHelper.close();}
}
如果各位有更好的做法及建議,歡迎各位共同討論!!
沒有留言:
張貼留言