Se eu consigo recuperar o ID do produto por meio do ResultSet com o código abaixo...
ResultSet rst = stm.getGeneratedKeys();
while (rst.next() {
Integer id = rst.getInt(1);
System.out.println ("O id criado foi: " + id);
}
rst.close();
... não significa que o produto foi inserido no banco de dados? Por que ainda é necessário fazer o connection.comit()?
Além disso, caso o produto não tenha sido efetivamente colocado no banco de dados, por que, no caso de exceção, eu preciso acionar o método connection.rollback? Porque se a exceção foi lançada, o commit nem foi acionado:
try { PreparedStatement stm =
connection.prepareStatement ("INSERT INTO PRODUTO (nome, descricao) VALUES (?, ?)",
Statement.RETURN_GENERATED_KEYS);
adicionarVariavel("SmartTV", "45 polegadas", stm);
adicionarVariavel("Radio", "Radio de bateria", stm);
connection.commit();
stm.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println("ROLLBACK EXECUTADO");
connection.rollback();
}