【问题标题】:android.database.sqlite.SQLiteException: near "," [duplicate]android.database.sqlite.SQLiteException:靠近“,” [重复]
【发布时间】:2015-02-03 08:44:03
【问题描述】:

我在一些安卓设备上遇到了很多崩溃。 (我的手机 LG G3s 上没有这个崩溃)。 所以,这是我的代码:

public void doUpdateDB(int appVersionCode) {

    if (getProperty(DB_VERSION).length() == 0) { // Before versionCode 36
        db.execSQL("INSERT INTO `dn_catalog_model` (`model_id`, `mark_id`, `model_name`) VALUES\n" +
                "(2022, 11, 'S1'),\n" +
                "(2023, 201, 'Runner 700C'),\n" +                  
                "(2463, 160, 'Nomad');");
    }

}

我崩溃了:

android.database.sqlite.SQLiteException: near ",": syntax error: INSERT INTO `dn_catalog_model` (`model_id`, `mark_id`, `model_name`) VALUES

我知道方法 dataBaseOpenHelper ))

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    SQLite 3.7.11 之前,您只能使用 INSERT 命令插入一条记录

    即:

    public void doUpdateDB(int appVersionCode)
    {
        if (getProperty(DB_VERSION).length() == 0)
        { // Before versionCode 36
            db.execSQL("INSERT INTO dn_catalog_model (model_id, mark_id, model_name) VALUES " +
                    "(2022, 11, 'S1')";
            db.execSQL("INSERT INTO dn_catalog_model (model_id, mark_id, model_name) VALUES " +
                    "(2023, 201, 'Runner 700C')";                  
            db.execSQL("INSERT INTO dn_catalog_model (model_id, mark_id, model_name) VALUES " +
                    "(2463, 160, 'Nomad')");
        }
    }
    

    截至SQLite 3.7.11,SQLite 支持多条记录插入:

    public void doUpdateDB(int appVersionCode)
    {
        if (getProperty(DB_VERSION).length() == 0)
        { // Before versionCode 36
            db.execSQL("INSERT INTO dn_catalog_model (model_id, mark_id, model_name) VALUES " +
                    "(2022, 11, 'S1'), (2023, 201, 'Runner 700C'), (2463, 160, 'Nomad')");
        }
    }
    

    【讨论】:

    【解决方案2】:

    你为什么使用那些 \n ?您可以尝试在没有它们的情况下执行查询吗?

    编辑: 对于 SQLite,请参阅此答案: https://stackoverflow.com/a/5009740/3736964

    SQLite 现在支持在一行中插入多条记录,如documentation here 所述。

    每当您进行 SQL 查询时,您都必须切断 \n(这就是您收到错误的原因)。正确的代码是:

    public void doUpdateDB(int appVersionCode) {
    
    if (getProperty(DB_VERSION).length() == 0) { // Before versionCode 36
        db.execSQL("INSERT INTO `dn_catalog_model` (`model_id`, `mark_id`, `model_name`) VALUES " +
                "(2022, 11, 'S1'), " +
                "(2023, 201, 'Runner 700C'), " +                  
                "(2463, 160, 'Nomad');");
    }
    

    }

    你总是可以在一行中执行一个 SQL 查询,没有换行符,实际上引擎会忽略它们,你通常会看到带有换行符的查询,但这只是为了更容易阅读:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多