我在一些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))
答案 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查询,没有换行符,实际上引擎会忽略它们,您通常会看到带有换行符的查询,但这只是为了让它更容易阅读:)