2011-06-04 45 views
1

從幾天,我面臨着怪異的例外是,如何在android中鎖定多個線程的數據庫?

IllegalStateException : database not opened. 

其實我更新數據庫從多個線程,可能是因爲我已經關後更新數據。所以請任何人告訴我如何爲sqlite數據庫應用鎖定和解鎖機制。

這裏有一個數據庫函數。請告訴我是否有任何錯誤。

if(cBookmark != null && !checkIfBookmarkExists(cBookmark)){ 
    SQLiteDatabase sqLiteDatabase = null; 
    try{  
     sqLiteDatabase = mDatabaseHelper.getWritableDatabase(); 
     SQLiteStatement sqLiteStatement = sqLiteDatabase.compileStatement(
       "insert into chart_bookmark ("+ 
       "package_id , chart_id , chart_title , offset_x, offset_y, zoomlevel)"+ 
       "Values(?,?,?,?,?,?)"); 
     synchronized(sqLiteStatement){ 
      sqLiteStatement.bindString(1, cBookmark.getPackage_id()); 
      sqLiteStatement.bindString(2,cBookmark.getChart_id()); 
      sqLiteStatement.bindString(3, cBookmark.getChartTitle()); 
      sqLiteStatement.bindString(4, cBookmark.getOffsetX()); 
      sqLiteStatement.bindString(5,cBookmark.getOffsetY()); 
      sqLiteStatement.bindLong(6,cBookmark.getZoomlevel()); 
      Log.v(TAG, ""+cBookmark.getChart_id()+cBookmark.getChartTitle()+ 
          cBookmark.getOffsetX()+cBookmark.getOffsetY()); 
      sqLiteStatement.execute(); 
      sqLiteStatement.close(); 
     } 
    }finally{ 
     sqLiteDatabase.releaseReference(); 
    } 
} 

回答