Blackberry编程中的SQL逻辑错误或缺少数据库

时间:2013-06-25 19:58:49

标签: java sqlite blackberry

我正在尝试将数据从黑莓插入到SQLite数据库中。当我调用屏幕时,我也调用了一种创建数据库的方法:

boolean sdCardPresent = false;

public static Database sqliteDB;

URI uri;
public  void createdatabase()
{

    try{
        Enumeration e = FileSystemRegistry.listRoots();
        root = (String)e.nextElement();
        Dialog.inform(root);
        if(root.equalsIgnoreCase("sdcard/"))
        {
        sdCardPresent = true;
        }
    if(!sdCardPresent)
        {
            Dialog.inform("O seu dispositivo nao suporta este compartimento sem cartao de memoria, verifique se existe um SD card no seu dispositivo.");
            UiApplication.getUiApplication().pushScreen(new Tab_Main());

        }else{
         uri = URI.create(
            "file:///SDCard/Databases/MBA.db");
        sqliteDB = DatabaseFactory.openOrCreate(uri);
        sqliteDB = DatabaseFactory.open(uri);
        Statement st = sqliteDB.createStatement("DROP TABLE IF EXISTS atms;CREATE  TABLE atms " +
                "( id INTEGER PRIMARY KEY AUTOINCREMENT ," +
                "  localizacao TEXT, " +
                "  mapa TEXT ," +
                "  foto1 TEXT ," +
                "  foto2 TEXT," +
                "  zona TEXT);" +
                "" +
                "DROP TABLE IF EXISTS balcoes;CREATE  TABLE balcoes " +
                "(  id INTEGER PRIMARY KEY AUTOINCREMENT ," +
                "  localizacao TEXT, " +
                "  mapa TEXT ," +
                "  foto1 TEXT ," +
                "  foto2 TEXT," +
                "  zona TEXT);" +
                "" +
                "DROP TABLE IF EXISTS contactos;CREATE  TABLE contactos " +
                "( id INTEGER PRIMARY KEY AUTOINCREMENT ," +
                "  nome TEXT, " +
                "  numero_conta INTEGER);") ;
           st.prepare();
           st.execute();
           st.close();
           sqliteDB.close();
        Dialog.inform("Status: Database was successfully created.");
        //}
    } catch (Exception e){
        System.out.println(e.getMessage());
        Dialog.inform("\n "+e);
        //UiApplication.getUiApplication().popScreen(Screen);
    }

}

之后我使用一些Editfields和其他组件来获取值。我调用该方法插入参数并发送查询:

  public  void insert_update(String query) {
    try {
                sqliteDB = DatabaseFactory.openOrCreate(uri);
        Statement st = sqliteDB.createStatement(query);                 
        //Statement statement = _db.createStatement(query); 
        st.prepare();                                          
        st.execute();  
        st.close();
        Dialog.inform("Adicionado com sucesso!!!");
    }
    catch ( Exception e ) {         
        Dialog.inform(e+"");
    }
}

例如,当我用query = "insert into contactos values (null,"a","1");调用它时,我得到一个例外。 SQL逻辑错误或缺少数据库。

1 个答案:

答案 0 :(得分:0)

尝试删除第三列值周围的引号。

INSERT INTO contactos VALUES (null,"a", 1);

它被定义为INTEGER。

numero_conta INTEGER

编辑

System.out.println(uri); // check if null, or different
if (uri == null) {
    uri = URI.create(
       "file:///SDCard/Databases/MBA.db");
}
sqliteDB = DatabaseFactory.openOrCreate(uri);
sqliteDB = DatabaseFactory.open(uri); // open again

Statement st = sqliteDB.createStatement(query);