【问题标题】:near "COLUMN_NAME": syntax error (code 1) in SQLite“COLUMN_NAME”附近:SQLite 中的语法错误(代码 1)
【发布时间】: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);

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

【问题讨论】:

标签: android mysql sql sqlite


【解决方案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`

        【讨论】:

          猜你喜欢
          • 2021-06-09
          • 1970-01-01
          • 2016-10-21
          • 2020-11-29
          • 2016-06-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-19
          相关资源
          最近更新 更多