2013-02-12 122 views
1

在我的應用程序中,我正在鎖定數據庫。數據庫被鎖定getReadableDatabase()android

我嘗試使用其他帖子提供的解決方案,但找不到合適的解決方案,這就是爲什麼我發佈這個問題。

這裏是的onCreate

DBAdapter db = new DBAdapter(this.getApplicationContext()); 
     dialoge = new Progress_Dialog(this); 
     dialoge.setCancelable(false); 
     try { 
      db.createDataBase(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

,這裏是創建數據庫方法

public void createDataBase() throws IOException{  
      boolean dbExist = checkDataBase();  
      if(!dbExist){ 
       this.getReadableDatabase();  
       try {  
        copyDataBase(); 
       } catch (IOException e) {  
        e.printStackTrace(); 
        throw new Error("Error copying database");  
       } 
      } 
     } 

以下是checkdatabase方法

private boolean checkDataBase(){  
      SQLiteDatabase checkDB = null; 
      try{ 
       String myPath = DB_PATH + DB_NAME; 

       String myPath2 = DB_PATH + DB_NAME2; 

       checkDB = SQLiteDatabase.openDatabase(myPath, null, 
         SQLiteDatabase.OPEN_READWRITE); 

       if(checkDB != null){ 
        checkDB.close(); 

       } 
       checkDB = SQLiteDatabase.openDatabase(myPath2, null, 
         SQLiteDatabase.OPEN_READWRITE); 

      }catch(SQLiteException e){ 
     //  e.printStackTrace(); 
       //database does't exist yet. 
       System.out.print("SQLiteException "+e.toString()); 
      } 
      if(checkDB != null){ 
       checkDB.close(); 

      } 
      return checkDB != null ? true : false; 
     } 

請幫我在這。

回答

6

的「鎖定」發生,因爲你正試圖打開多個SQLiteDatabase實例。按照此post中所述將您的SQLiteDatabase設爲單身。

+0

你的解決方案似乎很好,讓我使用它,並驗證它是否解決了我的問題,但爲+1的好信息在後:) – 2013-02-12 05:41:45

-4

更改此方法this.getReadableDatabase(); to this.getWritableDatabase();

它會工作...

+0

請您詳細說明該解決方案將如何工作? – 2013-02-12 05:31:28

+0

這應該沒有什麼區別。 – 2013-02-12 05:32:03

+0

我們創建數據庫的目的只有可讀或可寫。在ur代碼中數據庫的目的是讀寫所以它的強制性要調用this.getWritableDatabase();請相應地更改並運行它。你的代碼是checkDB = SQLiteDatabase.openDatabase(myPath,null, SQLiteDatabase.OPEN_READWRITE); – sri 2013-02-12 06:04:43