Я использую библиотеку java.sql для выполнения обновлений пакетами. Когда выполнено executeStatement.executeBatch(), в идеале он должен возвращать массив подсчетов обновлений.Состояние терминала для JDBC подготовленоStatement.executeBatch()
Но в некоторых случаях, вместо обновления считает он возвращает -2, как показано ниже ..
/**
* The constant indicating that a batch statement executed successfully
* but that no count of the number of rows it affected is available.
*
* @since 1.4
*/
int SUCCESS_NO_INFO = -2;
Таким образом, в этом случае, когда я бегу запросов в пакетах, нет никакого способа узнать, является ли конкретное выполнение пакетного запроса обновляло любые записи или нет. Таким образом, нет возможности определить условие терминала для выхода из цикла пакетного выполнения. Если у кого-то есть обходное решение или предложение. Было бы полезно.
У меня есть условие ниже прямо сейчас.
private static String batchUpdate() throws SQLException {
Connection dbConnection = null;
PreparedStatement preparedStatement = null;
String result = null;
String updateSQL = "update TABLE_NAME set SOME_FLAG ='T' \n" +
" where SOME_USER!='SOMEUSER' and SOME_FLAG = 'F' and rownum<=?";
try {
dbConnection = getDBConnection();
preparedStatement = dbConnection.prepareStatement(updateSQL);
dbConnection.setAutoCommit(false);
while (true) {
preparedStatement.setInt(1, 10000);
preparedStatement.addBatch();
int[] updateResults = preparedStatement.executeBatch();
if (updateResults == null || updateResults.length == 0 || updateResults[0] == -3) {
break;
}
dbConnection.commit();
}
result = "Records are updated!";
} catch (SQLException e) {
result = e.getMessage();
dbConnection.rollback();
} finally {
if (preparedStatement != null) {
preparedStatement.close();
}
if (dbConnection != null) {
dbConnection.close();
}
}
return result;
}
Собственно, можете ли вы разместить больше своего кода? Я не думаю, что вы должны хранить результаты в массиве. –
@AlvinBunk Добавлен весь метод – Vij
Я не понимаю, почему вы используете 'executeBatch()' вообще, если в пакете есть только одно обновление. Я также не вижу точки цикла. – EJP