“,”附近的Android批量插入语法错误

时间:2014-03-25 23:23:40

标签: android sqlite bulkinsert

我希望对以下代码有一点启示,因为我似乎无法弄清楚为什么它在"附近有语法错误,"

我试图在一个语句中一次插入多行。我的目标是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');

非常感谢帮助。

2 个答案:

答案 0 :(得分:1)

多值语法为added in sqlite 3.7.11。许多设备ship with an older version.

为了兼容性,一次只插入一行。为了提高性能,请考虑以下事项:

  • 使用compileStatement()预编译SQL,只需更改每行的绑定参数。

  • 在事务中包装插入以最小化I / O等待。

答案 1 :(得分:-1)

有人问过类似的问题:

SQL - Syntax error near ','

它可能不是语法错误,而是更多的定时/拥挤错误。