“COLUMN_NAME”附近:SQLite 中的语法错误(代码 1)

Posted

技术标签:

【中文标题】“COLUMN_NAME”附近:SQLite 中的语法错误(代码 1)【英文标题】:near "COLUMN_NAME": syntax error (code 1) in SQLite 【发布时间】:2014-08-02 18:03:14 【问题描述】:

我正在开发 android 项目,我正在使用 SQLite 数据库,我编写了一个插入查询:

sqliteDB_Obj.execSQL("INSERT INTO tbl_order_master (user_id, order, amount)" + "VALUES(" + strUserId +","+ strOrderString +","+ dblAmount +");");

但我收到以下错误

android.database.sqlite.SQLiteException: near "order": syntax error (code 1): , while compile: INSERT INTO tbl_order_master (user_id, order, amount) VALUES(dny, my test order , 160.0);

有些人之前也问过同样的问题,所以根据他们提到的答案,我尝试了以下方式:

String strTableName="tbl_order_master";
String strQuery= String.format("INSERT INTO %s (user_id, order, amount) VALUES(%s, %s, %s);", strTableName, strUserId, strOrderString, ""+dblAmount);
sqliteDB_Obj.execSQL(strQuery);

但仍然出现同样的错误请帮忙..谢谢..!

【问题讨论】:

可能问题是订单名是保留字?尝试使用 sort_order 或类似的列名或用反引号写。 Sqlite keywords 和“订单”就是其中之一 Syntax error due to using a reserved word as a table or column name in mysql的可能重复 更改列名“order”或使用order 【参考方案1】:

如果您使用保留名称(例如order)作为标识符,请将其放入"double quotes"。或者只是重命名标识符,使其不是保留关键字。

同样在 SQL 中,字符串文字需要写成'single quotes'。你的没有被引用。

不过最好使用参数,例如

execSQL("INSERT INTO tbl_order_master (\"user_id\", \"order\", \"amount\") VALUES (?, ?, ?)",
    new String[]  strUserId, strOrderString, Double.toString(dblAmount)  );

在第二个参数中传递参数值。

【讨论】:

这是一个救生员。谢谢! :)【参考方案2】:

ORDER 是 SQL 中的保留字,所以不能用作字段名

sqliteDB_Obj.execSQL("INSERT INTO tbl_order_master (user_id, order, amount)" + "VALUES(" + strUserId +","+ strOrderString +","+ dblAmount +");");

改成

sqliteDB_Obj.execSQL("INSERT INTO tbl_order_master (user_id, s_order, amount)" + "VALUES(" + strUserId +","+ strOrderString +","+ dblAmount +");");

【讨论】:

【参考方案3】:

尝试将order 列的名称更改为其他名称。 ordersqlite 中的保留字(即排序依据)。并且还缺少 单引号

所以试试这个(把order改成m_order

sqliteDB_Obj.execSQL("INSERT INTO tbl_order_master (user_id, m_order, amount)" + "VALUES('" + strUserId +"','"+ strOrderString +"','"+ dblAmount +"')");

【讨论】:

【参考方案4】:

试试这个。作为一种好的做法,始终使用引号来包装字符串字段值。

sqliteDB_Obj.execSQL("INSERT INTO tbl_order_master (user_id, order, amount) " + " VALUES ( '"    + strUserId +"', '"+ strOrderString +"',"+ dblAmount +") ");

【讨论】:

【参考方案5】:

试试这个

 sqliteDB_Obj.execSQL("INSERT INTO tbl_order_master (`user_id`, `order`, `amount`)" + "VALUES('" + strUserId +"','"+ strOrderString +"',"+ dblAmount +");");

更改列名“order”或使用`order`

【讨论】:

以上是关于“COLUMN_NAME”附近:SQLite 中的语法错误(代码 1)的主要内容,如果未能解决你的问题,请参考以下文章

Massive.Sqlite.cs -- 原型失败,因为没有 COLUMN_NAME;修复使用 PRAGMA table_info?

更新 SQLite - “WHERE”附近:语法错误(代码 1 SQLITE_ERROR):

org.sqlite.SQLiteException:[SQLITE_ERROR] SQL 错误或缺少数据库(“as”附近:语法错误)

基于纬度/经度查询附近兴趣点的 SQL 查询 - SQLite

“dasani2”附近的 Sqlite 错误:语法错误

android.database.sqlite.SQLiteException:在“Foreign”附近:语法错误(代码 1):