Me deparo com a seguinte situação: Preciso inserir muitos registros no banco de dados postgres (mais ou menos uns 30 mil).
Quando estava fazendo a inserção, tomei o seguinte erro: “FATAL: desculpe, muitos clientes conectados”. Ou seja, o meu banco não está suportando muitas conexões abertas simultaneamente.
Qual é a melhor forma de pegar o List da minha classe chamada Patrimonio e inserir de uma vez no banco?
[code]for(Patrimonio patrimonio : patrimonios){
PatrimonioDAO DAO = new PatrimonioDAO();
DAO.adiciona(patrimonio);
}[/code]
Eu não havia fechado, depois arrumei. Mas fiquei curioso pra saber se é possível inserir um list de uma vez só no banco. Eu estava lendo, não sei se o caminho é esse, mas me parece que é através de Batch.
[quote=rafaelrodrigues1607]Eu não havia fechado, depois arrumei. Mas fiquei curioso pra saber se é possível inserir um list de uma vez só no banco. Eu estava lendo, não sei se o caminho é esse, mas me parece que é através de Batch.[/quote]Você poderia fazer um batch insert.
Em JDBC seria algo do tipo
String sql = "insert into pessoa(nome) values('jose');insert into pessoa(nome) values('maria');insert into pessoa(nome) values('jesus');"E executa o insert.
Provavelmente o que você está fazendo é o que o Hebert falou, está abrindo trocentas conexões e não está fechando elas, e isso é lento demais
Eu tive um problema semelhante, só que com mySQL, precisava inserir 10k de registros no banco, então eu criei um StringBuilder com um insert mais ou menos assim:
Fazendo isso, eu pude inserir todos de uma vez com uma só conexão ao banco, ficou muito mais rápido.
Só tens que levar em consideração que não dá pra fazer um StringBuilder com todos os 30mil registros, vai lotar tua memória, então divide essa inserção, faz de 5k em 5k, ou 10k em 10k, ou como preferir…
Faça a verificação no StringBuilder pra ver se não tem nenhum injection no meio!
[quote=rafaelrodrigues1607]Acredito que a melhor solução seja fazer isso usando JPA mesmo. [/quote]Não existe melhor/pior.
Existe a que for mais adequada para o seu sistema. [=