2012-04-23 71 views

回答

0

當您嘗試打開已打開的數據庫時會發生此錯誤。

在第一個選項卡中,您已經打開了數據庫連接,但是當您切換另一個選項卡時,則關閉了數據庫連接。

您應該在重新打開之前關閉數據庫連接。

看到下面的鏈接查看更多細節

http://docs.blackberry.com/en/developers/deliverables/29299/Opening_and_closing_databases_1585333_11.jsp

如果仍無法解決問題,請粘貼您的數據庫代碼。

+0

當我在另一個選項卡中時,我在finally塊中關閉數據庫。 – user1350661 2012-04-23 07:32:46

+0

請參閱我的代碼 – user1350661 2012-04-23 07:41:11

+0

我在哪裏看到您的代碼? – 2012-04-23 08:32:59

0

要打開數據庫代碼

public void openDb(){ 
    try{ 
     closeDb(); 
     // Open the database   
      URI uri = URI.create("Go2Reward.sqlite");  
     Logger.debug("-----URI-----"+uri); 
     _db = DatabaseFactory.open(uri); 
    }catch(Exception e){ 
     Logger.error("--------- in open db====="+e.getMessage()+"----"+e); 
    } 
} 

//關閉數據庫

public void closeDb(){ 
    try{ 
     if(_db != null) 
     { 
      Logger.debug("----close db---"); 
      _db.close(); 
      _db = null; 
     } 
    }catch(Exception e){ 
     Logger.error(" ---------in close db" , e); 
    } 
} 

代碼從數據庫中獲取的數據是遵循

public Vector getCategoryVector() { 
    Vector categoryVec = new Vector(); 
    try{ 
     openDb(); 
     Statement statement = _db.createStatement("SELECT category FROM CategoriesTable"); 
     statement.prepare(); 
     Cursor cursor = statement.getCursor(); 

     Row row; 
     while(cursor.next()) { 
      row = cursor.getRow(); 
      categoryVec.addElement(row.getString(0)); 
     } 

     cursor.close(); 
     statement.close(); 
    }catch (Exception e) { 
     Logger.error("---error getCategoryVector---"+e.getMessage()); 
    }finally{ 
     closeDb(); 
    } 
    return categoryVec; 
} 

但是當我打開數據庫它的工作很好,但在10個事務內,它會返回異常net.rim.device.api.database.DatabaseIOException:Fi le系統資源不足

+0

這段代碼在黑莓模擬器中工作正常,但在真實設備上,它給出了異常net.rim.device.api.database.DatabaseIOException:文件系統資源不足 – user2656062 2013-12-11 09:21:48