Java &引用;DatabaseIOException:文件系统错误(12)";什么时候使用数据库?
我已经创建了一个选项卡栏,当我第一次在数据库屏幕中输入时会出现,这段代码运行良好。但当我们转到另一个选项卡,然后再转到数据库屏幕选项卡时,它会抛出一个异常 net.rim.device.api.database.DatabaseIOException:文件系统错误(12) 我已正确关闭数据库 我在finally块中关闭了数据库。每次移动选项卡时,数据库都会关闭 这是我的代码:Java &引用;DatabaseIOException:文件系统错误(12)";什么时候使用数据库?,java,blackberry,Java,Blackberry,我已经创建了一个选项卡栏,当我第一次在数据库屏幕中输入时会出现,这段代码运行良好。但当我们转到另一个选项卡,然后再转到数据库屏幕选项卡时,它会抛出一个异常 net.rim.device.api.database.DatabaseIOException:文件系统错误(12) 我已正确关闭数据库 我在finally块中关闭了数据库。每次移动选项卡时,数据库都会关闭 这是我的代码: Database d = null; URI _uri = null; Statement st
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
}
}
您正在从数据库中检索所选选项卡上的值? 您可以考虑这种打开和关闭数据库的替代方法,它总是产生较小的错误
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());
}
否则,您可以在获取值之前在每个选项卡上包含db open语句,尽管这会增加您的编程代码行。当您关闭光标或语句时,可能会出现另一个错误。因为所有的关闭代码都在同一个try/catch中,所以您有机会不要关闭数据库本身。我不认为这种方法更好。如果出现错误,数据库可能未正确关闭。