Existem o conceito de transação em Java? (commit(), rollback(), etc)
Se sim, quais são os comandos?
Por exemplo, para efetuar uma exclusão em cascata?
Existem o conceito de transação em Java? (commit(), rollback(), etc)
Se sim, quais são os comandos?
Por exemplo, para efetuar uma exclusão em cascata?
o JTA e o JTS sao apis que andam lado a lado para fazer transacao em qualquer coisa que alguem tenha implementado suporte para tal.
mas do que voce esta falando exatamente? de banco de dados o JDBCzinho ja tem tudo pronto. claro que ele delega ao driver específico, entao nos bancos sem transacao nao vai funcionar.
Considerando que seu banco de dados suporta transação, a interface java.sql.Connection para cada banco de dados possui os métodos que você precisa para fazer “commit” e “rollback” de operações. Algo do tipo:
// conn é a instância já criada da sua conexão com o banco de dados
try{
conn.setAutoCommit(false);
//faz alguma coisa no banco de dados...
conn.commit();
catch(SQLException se){
conn.rollback();
//faz log da operação
}
Mais informações: http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Connection.html
Daniel é exatamente assim que fiz, mas:
Fiz a exclusão em na tabela1, depois na tabela 2, tabela3 e na tabela4 ocorre um erro, certo?
O rollback() só volta a consistencia da tabela3, e a 1 e 2, ja era?
Nao tem uma esquema tipo o Transaction do VB, para tratar tudo em um bloco só?
Obs: Paulo a aplicação será multi banco. Tem que funcionar indepente de drive.
[quote="
thiagorani"]Obs: Paulo a aplicação será multi banco. Tem que funcionar indepente de drive.[/quote]
O que o Paulo quis dizer é que o driver que que contém as implementações das interfaces do pacote java.sql (implementações específicas para cada banco de dados) é quem vão fazer o trabalho sujo de controle de transação para você. Logo, se o seu driver JDBC não tiver suporte a transações, os comandos não vão funcionar.
Sobre o problema que você está enfrentando, eu não sei como esta seu código, mas uma sugestão é você criar SavePoints a cada operação com o banco.
Pode cre, vi na API este SavePoint.
Como usar?
Olhadinha na API não faz mal… Mas aí vai um exemplo (não testei):
try{
conn.setAutoCommit(false);
SavePoint s0 = conn.setSavePoint("sv0");
// faz alguma coisa...
SavePoint s1 = conn.setSavePoint("sv1");
//faz alguma outra coisa e criando SavePoint conforme preciso...
conn.commit();
}catch(SQLException se){
conn.rollback(s0); //ou rollback(s1);... de acordo com a sua lógica de negócios...
// faça o log!!
}
E é isso.
P.S.: movi este tópico para o “Avançado”, porque ele está “On-Topic” demais para ficar no “Assuntos Gerais”.
Beleza Daniel.
Valeu cara.
Savepoint não funciona via ODBC?
UnsupportedException!
Não sei. Nunca tentei. Mas pelo visto não funciona. Logo, procure por um driver JDBC.