Sqlite 在Blackberry中切换类时丢失数据

Sqlite 在Blackberry中切换类时丢失数据,sqlite,blackberry,blackberry-simulator,Sqlite,Blackberry,Blackberry Simulator,我已经在我的黑莓应用程序中加入了一个数据库。当我启动应用程序时,数据库将生成,并将值插入数据库。但是,当我更改类时,即使用 HelloBlackBerryScreen bbScreen = new HelloBlackBerryScreen(); UiApplication.getUiApplication().pushScreen(bbScreen); this.invalidate(); 当我重新加载上一个类时,我得到以下结果: [0.0]

我已经在我的黑莓应用程序中加入了一个数据库。当我启动应用程序时,数据库将生成,并将值插入数据库。但是,当我更改类时,即使用

        HelloBlackBerryScreen bbScreen = new HelloBlackBerryScreen();
        UiApplication.getUiApplication().pushScreen(bbScreen);
        this.invalidate();
当我重新加载上一个类时,我得到以下结果:

 [0.0] FileIO:fileinfo start 5e2
 [0.0] FileIO:info by name complete 5e2
 [0.0] FileIO:fileinfo start 5e3
 [0.0] FileIO:info by name complete 5e3
 [0.0] FileIO:open start 5e4
 [0.0] FileIO:open complete 5e4
 [0.0] FileSystem:bad open status 12
 [0.0] File system error (12)read error here
 [0.0] No stack trace
当应用程序初始启动时,它会很好地读取数据库,并在相关区域中加载某些值,然后我切换到另一个类,该类也可以访问数据库,然后切换回第一个类,我得到了该错误。当我进入下一节课时,是否没有正确关闭数据库

下面是我用来获取数据库值的代码:

public void getValues(){
        try {
            URI uri = URI.create("file:///SDCard/Databases/" + "database2.db");
            sqliteDB = DatabaseFactory.open(uri);
            Statement st = sqliteDB.createStatement("SELECT Signauto,SaveP FROM options");
            st.prepare();
            Cursor c = st.getCursor();
            Row r;
            int i = 0;
            while(c.next()) 
            {
                r = c.getRow();
                i++;
                System.out.println(r.getString(0) + "HERE");
                System.out.println(r.getString(1) + "HERE");
                if(r.getString(0).equals("true")){
                    tickBoxes[1] = true;
                    //signAuto();

                }
                else{
                    tickBoxes[1] = false;
                }
                if(r.getString(1).equals("true")){
                    tickBoxes[0] = true;
                    setUserPass();
                }
                else{
                    tickBoxes[0] = false;
                }

            }

            if (i==0)
            {
                System.out.println("No data in the options table.");
            }
            st.close();
            sqliteDB.close();
        }

        catch ( Exception e ) {
            System.out.println( e.getMessage() + "read error here");
            e.printStackTrace();
        }
    }
有几件事需要尝试

将close语句移动到它们自己的catch块中,以便其中一个语句中的异常不会阻止另一个语句关闭

    } finally {
        try {
            if (st!=null) st.close();
        } catch (DatabaseException e) {
            System.out.println( e.getMessage() + "read error here");
        }
        try {
            if (sqliteDB!=null) sqliteDB.close();
        } catch (DatabaseIOException e) {
            System.out.println( e.getMessage() + "read error here");
        }
    }
还要同步访问数据库的方法,以便一个方法不会导致另一个方法出现异常