无法在Android设备中访问数据库

时间:2015-02-21 18:09:57

标签: codenameone

以下是我用于为应用程序创建数据库的代码。我把这段代码放在init(Object context)方法中。

 boolean created = Database.exists("MyDB.db");
            db = Database.openOrCreate("MyDB.db");
            if(db == null){
                System.out.println("SQLite is not supported on this platform");
                return;
            }
            if (!created) {
                db.execute("create table temp (id INTEGER PRIMARY KEY,name text,num double);");
                for (int i = 0; i < users.length; i++) {
                    db.execute("insert into temp (name,num) values (?,?);", new String[]{users[i], "" + ages[i]});
                }
            }

在模拟器中它工作正常。我可以从数据库中获取数据并执行CRUD操作。但是当安装Android设备上的应用程序时它无法正常工作。即使数据库正在创建,我也不知道。

我尝试了另一个例子。这是代码。

try {
            boolean isExist = Database.exists("hx.db");
            db = Database.openOrCreate("hx.db");
            if(db == null) {
                System.out.println("SQLite is not supported on this platform");
                return;
            }

            if(!isExist) {
                db.execute("create table variable_type( id INTEGER PRIMARY KEY, varType TEXT);");
                for(int i = 0; i< variable_type.length; i++ ) {
                    db.execute("insert into variable_type( id, varType) values (?, ?);", new String[]{null, variable_type[i]});
                }
                db.execute("create table uom( id INTEGER PRIMARY KEY, varType TEXT, uom TEXT, uom_system TEXT );");
                for(int i = 0; i < uom.length -1; i++) {
                    db.execute("insert into uom( id, varType, uom, uom_system) values (?, ?, ?, ?);", new String[]{null, uom[0], uom[i+1], "NA"});
                }
            }
        } catch (IOException e1) {
            e1.printStackTrace();
        }

以下用于获取数据的方法。

 public List<String> getUnitTypes() {
        List<String> unitTypes = new ArrayList<String>();
        try {
            if(Database.exists("hx.db"))
                db = Database.openOrCreate("hx.db");

            Cursor cursor = db.executeQuery("select * from uom;");
            while(cursor.next()) {
                Row r = cursor.getRow();
                unitTypes.add(r.getString(2));
            }
        } catch (IOException e) {
            System.out.println("Exception in reading values;");
        }
        return unitTypes;
    }

这是我使用getUnitTypes()方法的表单。

    import java.util.List;
    import com.codename1.ui.ComboBox;
    .....
    private ComboBox<String> in_dropdown, out_dropdown ;
    private List<String> unitTypes ;
    .......
    public TemperatureConversion() {


    in_dropdown = new ComboBox<String>();
    in_dropdown.setCommandList(true);
    in_dropdown.addActionListener(unitChangeListener);

    out_dropdown = new ComboBox<String>();
    out_dropdown.setCommandList(true);
    out_dropdown.addActionListener(unitChangeListener);

    unitTypes = AppController.getUnitTypes();
    for (int i = 0; i < unitTypes.size(); i++) {
        out_dropdown.addItem(unitTypes.get(i));
        in_dropdown.addItem(unitTypes.get(i));
    }
.......
}

1 个答案:

答案 0 :(得分:0)

这几乎是来自SQLDemo的代码,它在Android设备上运行良好。我唯一能看出的区别是你使用了init(Object)方法,而SQLDemo使用了start()方法。但我不认为这会导致问题。

应用程序以什么方式工作?它无法启动吗?

我建议将代码移到start()方法中,包装try / catch中可疑的所有内容,并在出现异常时将带错误的标签放入表单中。