我希望对以下代码有一点启示,因为我似乎无法弄清楚为什么它在"附近有语法错误," 。
我试图在一个语句中一次插入多行。我的目标是API 10+。如果我只有一组VALUES(...)它一切都很好,并且插入了行,但是只要我有多个,就会发出一个带有语法错误消息的异常。
SQLiteDatabase db = getWritableDatabase();
String insertRows = "INSERT INTO " + TABLE_FRIENDS +
" (" + KEY_USER_EMAIL + ", " + KEY_FRIEND + ", " + KEY_FRIEND_INTERACTIONS +
", " + KEY_ENABLED +") VALUES ";
int index;
for(index=0; index<friends.size(); ++index){
insertRows += "('" + userAccount.getEmail() +"', ";
Friend friend = friends.get(index);
insertRows+= "'" + friend.getEmail() +"', ";
insertRows+= "'" + friend.getInteractions() +"', ";
int enabled = friend.isEnabled() ? 1 : 0;
insertRows+= "'"+ enabled + "')";
if(index != friends.size()-1)
insertRows+= ",";
}
insertRows += ";";
db.execSQL(insertRows);
db.close();
我在我的日志上打印出查询并获取:
INSERT INTO friends (user_email, friend_email, friend_interactions, friend_enabled) VALUES ('test2@test.com', 'vila@hotmail.com', '0', '0'),
('test2@test.com', 'anotherone@hotmail.com', '0', '0'),
('test2@test.com', 'yetanother@hotmail.com', '0', '0');
非常感谢帮助。
答案 0 :(得分:1)
多值语法为added in sqlite 3.7.11。许多设备ship with an older version.
为了兼容性,一次只插入一行。为了提高性能,请考虑以下事项:
使用compileStatement()
预编译SQL,只需更改每行的绑定参数。
在事务中包装插入以最小化I / O等待。
答案 1 :(得分:-1)