android.database.sqlite.SQLiteException:near“”:语法错误

时间:2012-09-19 04:43:36

标签: android sqlite syntax save

我在SQLite中添加记录时遇到了问题。

这是错误

09-18 17:47:47.586: E/AndroidRuntime(1039):
   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.capstone.pinoygoodies/com.capstone.pinoygoodies.GroceryView}:
   android.database.sqlite.SQLiteException: near " ":
   syntax error:
   CREATE TABLE tblItem 
                 (_id INTEGER PRIMARY KEY AUTOINCREMENT,
                  grocery_item TEXT NOT NULL,
                  grocery_qty TEXT NOT NULL 

我的创建表

db.execSQL("CREATE TABLE " + DATABASE_TABLE + "(" +
KEY_ITEMID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_ITEM + " TEXT NOT NULL, " + 
KEY_QTY + " TEXT NOT NULL ");

每当我点击添加按钮时,都会触发此错误。

5 个答案:

答案 0 :(得分:7)

db.execSQL("
    CREATE TABLE " + DATABASE_TABLE + "(" +
    KEY_ITEMID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
    KEY_ITEM + " TEXT NOT NULL, " + 
    KEY_QTY + " TEXT NOT NULL );"
);

容易混淆。你只需要用右括号。

建议:

String createStatement = 
    String.format("CREATE TABLE %s ( %s INTEGER PRIMARY KEY
                   AUTOINCREMENT, %s TEXT NOT NULL, 
                   %s TEXT NOT NULL);",
                        DATABASE_TABLE,
                        KEY_ITEMID,
                        KEY_ITEM,
                        KEY_QTY);

如果你像这样构建你的表,我个人认为它使语句更容易阅读SQL语法之类的东西,然后你可以稍后绑定数据。

答案 1 :(得分:3)

在创建表格查询的末尾附加“)”。

答案 2 :(得分:1)

错误是由create table抛出,而不是获取数据。

检查你的create table sql语句

答案 3 :(得分:0)

您缺少Create Table Syntax的右括号,请按以下方式更正

CREATE TABLE tblItem 
                 (_id INTEGER PRIMARY KEY AUTOINCREMENT,
                  grocery_item TEXT NOT NULL,
                  grocery_qty TEXT NOT NULL ); 

答案 4 :(得分:0)

db.execSQL("CREATE TABLE " + DATABASE_TABLE + "(" +
KEY_ITEMID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_ITEM + " TEXT NOT NULL, " + 
KEY_QTY + " TEXT NOT NULL )");

您需要在创建表格中添加“)”。

插入查询

    String qty = "QTY";
    String item = "ITEM";
    String sql = "INSERT or replace INTO "+ DATABASE_TABLE +" (qty, item) VALUES('"+ qty +"','"+ item + "')";
    db.execSQL(sql);