Olá,
Estou tentando fazer duas inserções no banco de tal forma que se uma for feita a outra deverá ser feita. No entanto gostaria de que se algo der errado na segunda inserção a primeira fosse desfeita. Para isso estou usando cn.rollback() e quando verifica o erro, a primeira inserção não é desfeita.
public boolean ExecutaSQL() throws ErrosBD, SQLException {
Connection cn = null;
PreparedStatement stmt = null;
boolean fezSQL1 = false;
boolean fezSQL2 = false;
try {
cn = Conexao.getConnection(ConexaoPlenamente.DRIVER[local], // Driver
Conexao.BANCO[local], // Endereço do banco
Conexao.LOGIN[local], // Login
Conexao.SENHA[local]); //Senha
cn.setAutoCommit(false);
StringBuffer SQL = new StringBuffer();
SQL.append("Insert into pessoa (nome) values ('André')");
stmt = cn.prepareStatement(SQL.toString());
if (stmt.executeUpdate() == 1) {
fezSQL = true;
} else {
fezSQL = false;
}
StringBuffer SQL2 = new StringBuffer();
SQL2.append("Insert into pessoa (nome2) values ('André')");
stmt2 = cn.prepareStatement(SQL2.toString());
if (stmt2.executeUpdate() == 1) {
fezSQL2 = true;
} else {
fezSQL2 = false;
}
cn.setAutoCommit( true );
return fezSQL1 && fezSQL2;
} catch (SQLException e) {
cn.rollback();
throw new ErrosBD(ErrosBD.ERRO_SQL, e);
} finally {
Conexao.close(stmt);
Conexao.close(cn);
}
}
Porém quando visualizo no banco a primeira inserção é feita enquanto a segunda da erro. Como resolver isso.
Minha pergunta então é: MySql aceita cn.rollback(); ?
Ou este banco é porco mesmo?