Conn.commit(); e conn.setAutoCommit(true);

Boa tarde fórum!!!
Ao executar um update, qual é a diferença entre setar um autocommit ou chamar o commit logo após a execução?

Exemplo:[code]Connection conn = null;
conn.setAutoCommit(true); //melhor aqui?
PreparedStatement pstmt = null;
ResultSet rs4 = null;
try
{
String query = "UPDATE user.tablex "+
" SET co_erro = ? "+
" WHERE nu_rg = ? ";

		conn = getConnection();			
		pstmt = conn.prepareStatement(query);
		pstmt.setInt(1,3); //3 - status ok				
		pstmt.setInt(2,rg[0]);
		pstmt.executeUpdate();			
		conn.commit(); //ou melhor aqui???
    }
	catch (SQLException e) 
	{ 
		throw e; 
	}
	finally	
	{ 
		closeConnection(conn, pstmt, rs); 			
	}[/code]

Qual o melhor?
Vlw[]´s!!!

Eu recomendo o setAutoCommit(false) para permitir rollback’s, pois, por exemplo, se você tiver mais de um statement e estes estiverem em uma mesma transação, você garante a integridade…

Gosto de algo do tipo:

try {
    // Código da conexão
    conn.setAutoCommit(false);
    // Statements, queries e afins
} catch(Exception e) {
    conn.rollback();
} finally {
    conn.commit();
}

Confesso que faz muito tempo que não mexo com JDBC, por isto não sei se as sintaxes estão corretas, mas é por aí… 8)

Só complementando, se você setar o autocommit pra true, vai ser dado commit a cada statement que você executar sem dar chance de dar rollback. Em poucos casos essa é a melhor opção…

De uma estudada em transações.

[]'s

Rodrigo Auler

Ok kras!!!
Já ajudaram bastante!!!
Vlw!!!
8)

Nesse seu exemplo não vejo diferença.
Transações são interessantes quando estão dentro de um contexto, ou seja, é possível/necessário gravar tudo, ou desfazer tudo!

Neste seu update, se houvesse erro ele não seria gravado, tanto com o AutoCommit (true) quanto com o “.commit()” na mão.
Agora, se houvessem dois comandos, e um deles gerasse erro, o AutoCommit (true) deixaria um persistido no banco, o que pode ferir a integridade dos dados…
Já manipulando na mão (com commits e rollbacks) você poderia desfazer todos os comandos em caso de erro.

Eu já tive problemas de transação com JDBC e Firebird… Não é possível desacoplar a transação da conexão.

Agora parti pro Hibernate, por enquanto estou sendo feliz!