使用数据库时出现“DatabaseIOException:文件系统错误(12)”?

问题描述:

我创建了一个标签栏,当我第一次进入数据库屏幕时出现这个代码工作正常。但是,当我们去另一个选项卡上和数据库屏幕选项卡上再去它抛出一个异常使用数据库时出现“DatabaseIOException:文件系统错误(12)”?

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

我已经正确关闭数据库。

我在最后block.Database是当我移动的标签

这是我的代码每次关闭关闭数据库:

Database d = null; 
    URI _uri = null; 
    Statement st = null; 
    Cursor c = null; 

    try 
    { 

     _uri=URI.create("file:///SDCard/MyBudgetTracker.db"); 
      if (DatabaseFactory.exists(_uri)) { 
       d=DatabaseFactory.openOrCreate(_uri,new DatabaseSecurityOptions(false)); 
       st = d.createStatement("SELECT * FROM "+Globalvalue.planCategoryTable); 
       st.prepare(); 
       c = st.getCursor(); 
       Row r; 
       int i = 0; 

       while(c.next()) { 
        r = c.getRow(); 
        r.getString(0); 
        i++; 
       } 
       if (i==0) 
       { 
        add(new RichTextField("No data in the User table.")); 
       } 

     } 


    }catch (Exception e) 
    { 
     System.out.println(e.getMessage()); 
     System.out.println(e); 
     e.printStackTrace();// TODO: handle exception 
    } finally { 
     try { 
      if (DatabaseFactory.exists(_uri)) { 
       if (c != null) { 
        c.close(); 
       }if (st != null) { 
        st.close(); 
       } if (d != null) { 
        d.close(); 
       } 
      } 
     } catch (Exception e2) { 
      // TODO: handle exception 
     } 
    } 
+0

这是Android,不是? – 2012-04-24 06:58:14

+0

当你关闭游标或语句时,你可能会遇到另一个错误。由于所有的结束代码都在同一个try/catch中,所以你有机会不关闭数据库本身。 – 2012-04-24 08:08:34

您检索值到您选择的标签从数据库? 您可以考虑打开和关闭数据库的这种替代方法。它始终产生较小的错误。

try 
{  
    //Open or create the database 
    Database db = DatabaseFactory.openOrCreate("MyBudgetTracker.db");  
    //Retrieve Data from db 
    Statement statement1 = db.createStatement("SELECT * FROM "+Globalvalue.planCategoryTable); 
    statement1.prepare(); 
    statement1.execute();  
    statement1.close(); 
    db.close(); 
} 
catch(DatabaseException dbe) 
{ 
    System.err.println(dbe.toString()); 
} 

否则,您可以包括在每个回合标签的分贝公开声明ú取前值虽然它WUD增加乌尔编程代码行。

+0

我不认为这种方法更好。如果出现错误,Db可能无法正确关闭。 – 2012-04-25 07:59:54