Commit() e Rollback() em MySQL

4 respostas
Romeo

Olá a todos, estou com problemas em implementar estes dois métodos na minha transação.
O programa tem estas linhas:

[color=green]conexao = DriverManager.getConnection(Inicio.url, Inicio.usuario, Inicio.senha);// conexão é global

conexao.setAutoCommit(false);

PreparedStatement sql = conexao.prepareStatement("")[/color] (a query)

Existem também mais 3 PreparedStatement (“sq1”,“sql2”…), todos nesta mesma conexao

no final coloquei o seguinte:

[color=green]sql.executeUpdate();

sql1.executeUpdate();

sql2.executeUpdate();

sql3.executeUpdate();

conexao.commit();
conexao.setAutoCommit(true);[/color]

No caso de erro implemento no [color=darkred]catch [/color] conexao.rollback(); (Que precisa estar entre try e catch)

No entanto isto não funciona(compila, e não dá erro de execução) pois como teste altero uma das query mas as anteriores são gravadas no banco.

Existe algum erro lógico ou está mal implementado, ou pode ser problema do MySQL que não suporta commit e rollback?(Versão mysql-3.23.38)

Obrigado, Romeo

4 Respostas

louds

mysql suporta transações apenas com tabelas transacionais, como InnoDB, se qualquer alteração da tua transação tocar em uma tabela que não seja, o mysql reverte pra auto-commit.

Romeo

Qual seria a solução então?
Ou não existe e preciso mudar o método de fazer a transação, qual seria a API?

ramilani12

Se suas tabelas são do tipo MYISAM , MYISAM não suporta commit e nem rollback o que vc pode fazer é transformar essas tabelas para InnoDB

ALTER TABLE tabela TYPE = InnoDB
Romeo

O MySQL admin deu o seguinte erro

Cannot initialize InnoDB as ‘innodb_data_file_path’ is not set.

tem q baixar esse path ou configurar?
E como se faz isso?

Criado 2 de março de 2007
Ultima resposta 2 de mar. de 2007
Respostas 4
Participantes 3