0

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

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

我已经正确关闭了数据库。

4

2 回答 2

0

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

在第一个选项卡中,您已经打开了数据库连接,但是当您切换另一个选项卡时,您将如何关闭数据库连接。

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

有关更多详细信息,请参阅以下链接

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

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

于 2012-04-23T07:23:18.393 回答
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: File system out of resources

于 2013-12-11T04:59:05.033 回答