No código:
public class TestaInsercao {
public static void main(String[] args) throws SQLException, IllegalAccessException {
Connection connection = Database.getConnection();
connection.setAutoCommit(false);
PreparedStatement statement;
try {
String sql = "INSERT INTO Produto(nome, descricao) VALUES (?, ?)";
statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
adiciona("TV LCD", "32 polegadas", statement);
adiciona("Blueray", "Full HDMI", statement);
connection.commit();
statement.close();
} catch (Exception e) {
e.printStackTrace();
connection.rollback();
}
connection.close();
}
E função
private static void adiciona(String nome, String descricao, PreparedStatement statement) throws SQLException, IllegalAccessException {
if (nome.equals("Blueray")) {
throw new IllegalAccessException("Problema ocorrido");
}
statement.setString(1, nome);
statement.setString(2, descricao);
boolean resultado = statement.execute();
System.out.println(resultado);
ResultSet resultSet = statement.getGeneratedKeys();
while (resultSet.next()) {
String string = resultSet.getString("id");
System.out.println(string);
}
}
}
Caso houvesse um erro no 2o adiciona (que adiciona o Blueray), o statement não ira ficar em aberto (já que o programa pularia para o catch e não chegaria no close) ?