Это зависит от того, как вы вставляете строки.Если вы вставляете их в одну транзакцию в соединении, для которого автоматическая фиксация отключена connection.setAutoCommit(false)
, и вы фиксируете соединение после завершения запросов вставки, используя connection.commit()
, и вы явно вызываете connection.rollback()
внутриблок catch, тогда вся транзакция будет откатана.В противном случае вы зависите от факторов окружающей среды, которые вы не можете контролировать.
См. Также:
Обновление: вот переписывание вашего кода.Обратите внимание, что соединение и оператор должны быть объявлены до try
, получены в try
и закрыты в finally
.Это сделано для предотвращения утечки ресурсов в случае исключений.
String sql = "insert into job_input values (?, ?)";
Connection connection = null;
PreparedStatement statement = null;
try {
connection = database.getConnection();
connection.setAutoCommit(false);
statement = connection.prepareStatement(sql);
for (List row : data) {
statement.setInt(1, Integer.parseInt(row.get(0).toString()));
statement.setInt(2, Integer.parseInt(row.get(1).toString()));
statement.addBatch();
}
statement.executeBatch();
connection.commit();
return true;
} catch (SQLException e) {
if (connection != null) try { connection.rollback(); } catch (SQLException logOrIgnore) {}
e.printStackTrace();
return false;
} finally {
if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
}
Я, кстати, не фанат возврата boolean
здесь.Я бы просто сделал метод void
, разрешил catch
throw e
и поместил бы вызывающий код в try-catch
.