Olá
Na segunda parte da aula, onde colocamos os blocos try, o código fica assim:
public class TestaInsercao4 {
public static void main(String[] args) throws SQLException {
try (Connection connection = Database.getConnection()){
connection.setAutoCommit(false);
String sql = "insert into produto (nome, descricao) values (?, ?)";
try (PreparedStatement statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)){
adiciona("TV LCD", "32 polegadas", statement);
adiciona("Blueray", "Full HDMI", statement);
connection.commit();
} catch (Exception e) {
e.printStackTrace();
connection.rollback();
System.out.println("Rollback Efetuado");
}
}
}
private static void adiciona(String nome, String descricao, PreparedStatement statement) throws SQLException {
if(nome.equals("Blueray")) {
throw new IllegalArgumentException("Problema Ocorrido");
}
statement.setString(1, nome);
statement.setString(2, descricao);
boolean resultado = statement.execute();
try (ResultSet resultSet = statement.getGeneratedKeys()){
while(resultSet.next()) {
int id = resultSet.getInt("id");
System.out.println("id adicionado: " + id);
}
}
}
}
Porém, se eu remover a linha "connection.rollback()", o programa gera o mesmo resultado. O que é esperado, pois o "connection.commit()" no bloco try só está ocorrendo ao fim das transações, então caso haja uma exception, não haverá commit, com ou sem o rollback. Então pergunto, qual é a real utilidade de colocarmos "connection.rollback()" no programa?