net.rim.device.api.database.DatabaseIOException:文件系统错误(12)

时间:2012-04-23 06:56:14

标签: blackberry

我创建了一个标签栏,当我第一次进入数据库屏幕时出现,此代码工作正常。但是当我们进入另一个选项卡并再次进入数据库屏幕选项卡时,它会引发异常

net.rim.device.api.database.DatabaseIOException:文件系统错误(12)

我已正确关闭数据库。

2 个答案:

答案 0 :(得分:0)

当您尝试打开已打开的数据库时,会发生此错误。

在第一个选项卡中,您已打开数据库连接,但是当您切换另一个选项卡时,则关闭数据库连接的方式。

您应该在重新打开之前关闭数据库连接。

请参阅以下链接了解更多详情

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

如果您仍无法解决问题,请粘贴数据库代码。

答案 1 :(得分: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:文件系统资源不足