Como fazer controle de transação

5 respostas
indivito

ae povo,

procurei mas nao achei nada de como é feito controle de transação no java.

tipo… se eu tenho 3 querys e caso uma falhe como eu faço pra dar o roll back nas outras?
ou entao o commit em caso de sucesso?

vlw,

5 Respostas

andre_a_s
Primeiro vc tem q falar q a conexao nao fará o commit automático;
Connection conn = MinhaConexao.getConnection();
conn.setAutoCommit(false);
Depois é só dar o commit no caso de sucesso ou rollback no caso de erro. Por exemplo assim:
int success = ps.executeUpdate();
			
if(success == 1){
	conn.commit();
	conn.close();
}
else{
	conn.rollback();
	conn.close();
}
indivito

ahh! sakei!

entao por exemplo, se eu tiver 3 querys eu faço assim:

int sucess = 0;

success += ps.executeUpdate();

.
. (preparando segunda query)
.
sucess += ps.executeUpdate();

.
. (preparando terceira query)
.
sucess += ps.executeUpdate();

 			
 if(success == 3){
 	conn.commit();
 	conn.close();
 }
 else{
 	conn.rollback();
 	conn.close();
 }

é assim mesmo que “os bons” fazem?

F

Alguns detalhes.

Em query nao precisa dar commit ela é “read only”.

Uma outra coisa, tu precisa definir o escopo da transacao, como vai tratar ela, por requisicao, por comando, etc.
Claro que no fim das contas tudo se resume a commit e rollback, mas é importante definir onde isso vai ser feito.
Alem disse dependendo do que tu for fazer podes usar algum framework que gerencie tuas transacoes.

]['s

indivito

oow amigo,

como faço isso?

tipo quais?

vlw

Z

É recomendável também você fazer uso de contruções do tipo: try { ... ... conn.commit(); } catch(Exception e) { conn.rollback(); ... //mostra exceção, loga, lança denovo, faz o diabo a 4, etc.!! }
pra garantir que o rollback seja dado, caso algo não previsto aconteça.

Criado 10 de julho de 2005
Ultima resposta 11 de jul. de 2005
Respostas 5
Participantes 4