android.database.sqlite.SQLiteException:near“,”

时间:2014-12-05 08:12:44

标签: android sqlite

我在一些Android设备上遇到很多崩溃事件。 (我的手机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))

2 个答案:

答案 0 :(得分:2)

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')");
    }
}

答案 1 :(得分:1)

为什么要使用\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查询,没有换行符,实际上引擎会忽略它们,您通常会看到带有换行符的查询,但这只是为了让它更容易阅读:)