Transaction - JDBC

4 respostas
emanuell

Pessoal,

Tem como eu criar varias transações com o mesmo objeto Connection?

Gostaria de fazer parecido com o esquema do Hibernate, só que sem usar o Hibernate… Infelizmente o JDBC não tem um objeto Transaction :frowning:

[]'s

4 Respostas

Y

Acredito que sim.

Faça testes.

Crie uma conexão. Inicie uma transação. Execute um UPDATE, dê commit. Inicie outra transação, execute outro UPDATE, e dê novamente um commit.

Se ambos os UPDATE’s geraram alterações no banco de dados, então sim, COnnection permite mais de uma transação.

A não ser que você queira transações concorrentes?

emanuell

Yky Mattshawn:
Acredito que sim.

Faça testes.

Crie uma conexão. Inicie uma transação. Execute um UPDATE, dê commit. Inicie outra transação, execute outro UPDATE, e dê novamente um commit.

Se ambos os UPDATE’s geraram alterações no banco de dados, então sim, COnnection permite mais de uma transação.

A não ser que você queira transações concorrentes?

Nao entendi quando voce diz, “Inicie uma transação”

Pelo que sei, não existe explicitamente “BeginTransaction” e sim autoCommit(false).

Quero por exemplo, criar uma transacao dentro de outra… se a mais interior falhar, irá falhar as superiores…
seria transações concorrentes, é isso?

Y

Hmmm… é que o sistema que estou trabalhando não é Java, então quando quero uma transação eu uso um StartTransaction() mesmo, hehehe.

Então… é o autoCommit(false) mesmo.

Quanto a encadear transações (isso que você quer fazer) não sei se é possível não.

É que eu realmente nunca usei transações diretamente com JDBC.

Mas acho que o mais certo seria você criar uma única transação.

A cada instrução que você executa, se der erro, dá um rollback e cancela tudo.

Vai executando diversas operações dentro da transação. Se em algum momento alguma operação apresentar problema, dá um rollback e desfaz tudo de tudo.

Se as operações são em objetos diferentes, tu podes manter a conexão em uma variável estática (pode até ser uma classe Transaction que armazena um objeto Connection) que executa as operações dentro da transação.

sergiotaborda

emanuell:

Nao entendi quando voce diz, “Inicie uma transação”

Pelo que sei, não existe explicitamente “BeginTransaction” e sim autoCommit(false).

Quero por exemplo, criar uma transacao dentro de outra… se a mais interior falhar, irá falhar as superiores…
seria transações concorrentes, é isso?

Realmente não existe um beginTransaction apenas um commit e roolback. O objeto connection assume que a transação começar no primeiro comando que for enviado depois do commit (ou se nenhum commit foi feito antes).

Não tem como criar transações aninhadas. contudo, transações são “ambientes” onde o codigo executa.
Se vc tiver 100 classes que escrevem no connection mas escrevem no mesmo connection, então as 100 classes estão participando da transação. Ou seja, os codigos podem ser aninhados, as transações não.

Criado 7 de março de 2008
Ultima resposta 7 de mar. de 2008
Respostas 4
Participantes 3