Insert/Update com JDBc

3 respostas
rogeriosantos77

Srs,

Em uma operação de banco usando jdbc , qual seria a vantagem em usar o seguinte comando

for () {

…

preparedStatement.addBatch();

}
preparedStatement.executeBatch();

ao invés de

for () {

…

preparedStatement.executeUpdate();

}

Essa forma Batch() é mais rápida, economiza chamadas ao banco ou simplesmente é igual a se fazer um executeUpdate ?

3 Respostas

_fs

Economiza bastante, principalmente quando fazendo updates em massa.

Recomendo que faça um teste inserindo algumas dezenas de milhares de registros no banco.

rogeriosantos77

Filipe Sabella:
Economiza bastante, principalmente quando fazendo updates em massa.

Recomendo que faça um teste inserindo algumas dezenas de milhares de registros no banco.

Realmente eu imaginei isso também Filipe, mas é que eu me deparei com um problema usando o batch(), que é o seguinte eu tenho um metodo que deleta os dados de uma tabela e um outro metodo que usa o batch() para um insert em massa. So que ao executar o batch ocorre um erro para mim de violação de chave primaria pois da a impressão que o comando delete executado em outro metodo não é enxergado pelo método que tem o batch(), sendo que a conexão usada nos dois métodos é a mesma, pois passa a conexão por parametro pros métodos.
Fica a duvida o batch gerencia uma conexão a parte ou de forma diferente ?

_fs

Hm, entendi o problema.

Me falta o conhecimento para sabe como funciona o commit das transações para saber porque ele reclama do delete sendo que um insert que validaria o estado da tabela vem logo em seguida.

Toda vez que precisei fazer algo assim enviava um comando para desabilitar o check das fks antes de fazer o mass update e outro comando para reabilitar após.
No SQL Server o comando é esse:
http://msdn2.microsoft.com/en-us/magazine/cc163442.aspx

Criado 7 de abril de 2008
Ultima resposta 7 de abr. de 2008
Respostas 3
Participantes 2