Обновить много строк одновременно

Рейтинг: 0Ответов: 1Опубликовано: 04.05.2015

Здравствуйте. Есть таблица SQLite:

id | playername | minutes

Каждую минуту нужно у заданых playername добавить +1 к minutes.

Такой код не работает:

Player[] players = Bukkit.getOnlinePlayers();
if(players.length == 0) return;
int iter = 0;
String query = "UPDATE timetop SET minutes=minutes+1 WHERE playername = ";
for(Player p : players) {
    System.out.println("iter: " + iter + ". length: " + players.length);
    query = query + "'" + p.getName() + "'";
    if(iter+1 == players.length) query = query + ";";
    else query = query + ", ";
    iter++;
}
System.out.println("QUERY: " + query);
db.execute(query);

А если точнее то он ругается на непонятный оператор ','.

Ответы

▲ 2Принят

Думаю, ошибка в том, что вы используете условие where playername = ... вместо условия where playername in (...).

Сейчас ваш запрос выглядит так:

UPDATE timetop SET minutes=minutes+1 WHERE playername = 'pl1', 'pl2';

Нужно сформировать запрос вида:

UPDATE timetop SET minutes=minutes+1 WHERE playername IN ('pl1', 'pl2');

Также есть некоторое замечание по поводу того, что для составления строки из частей лучше использовать StringBuilder вместо простой конкатенации строк.

StringBuilder query = new StringBuilder(
    "UPDATE timetop SET minutes=minutes+1 WHERE playername = ");
for (...) {
    query.append(...);
}
db.execute(query.toString());