“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
列的名称更改为其他名称。 order
是 sqlite
中的保留字(即排序依据)。并且还缺少 单引号
所以试试这个(把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
android.database.sqlite.SQLiteException:在“Foreign”附近:语法错误(代码 1):