Получить количество строк, обновленных с помощью PreparedStatement - PullRequest
4 голосов
/ 14 сентября 2010

Как узнать, сколько строк обновлено с помощью PreparedStatement?

.getUpdateCount() возвращает 0.

Для executeUpdate получена ошибка: во время дозирования произошла ошибка: партия должна быть либо выполнена, либо очищена

мой код:

updTrans = dataSource.getConnection().prepareStatement("update...");
updTrans.setInt(1, Integer.valueOf(transaksjonstatusid));
...
updTrans.addBatch();
upd = updTrans.executeUpdate();

Ответы [ 4 ]

8 голосов
/ 14 сентября 2010

При использовании пакетов следует использовать PreparedStatement#executeBatch().

...
updTrans.addBatch();
upd = updTrans.executeBatch();

Возвращает int[], содержащий количество обновлений для каждого пакета.

5 голосов
/ 14 сентября 2010

См. Javadoc

public int executeUpdate () throws SQLException

Выполняет оператор SQL в этом объекте PreparedStatement, который должен быть SQL INSERT,ОБНОВЛЕНИЕ или УДАЛЕНИЕ оператора;или оператор SQL, который ничего не возвращает, например оператор DDL.

Возвращает: либо (1) количество строк для операторов INSERT, UPDATE или DELETE, либо (2) 0 для операторов SQL, которые ничего не возвращают

Броски: SQLException - если ошибка доступа к базе данных происходит, или инструкция SQL возвращает объект ResultSet

5 голосов
/ 14 сентября 2010

Вы пытались использовать:

int n = preparedStatement.executeUpdate();

Здесь вы можете найти некоторые объяснения о том, как использовать PreparedStatement .

2 голосов
/ 14 сентября 2010

getUpdateCount предназначен для использования с методом execute(String sql).Вы, вероятно, делаете это:

String sql = "UPDATE some_table SET somecolumn = ? WHERE someId = ?";
PreparedStatement ps = connection.prepare(sql);
ps.setString(1, val);
ps.setInt(2, id);
ps.executeUpdate();

В этом случае вы должны просто сделать

int rowsUpdated = ps.executeUpdate();
...