Como acessar o PostgreSQL com Java, Kotlin, Groovy, Scala pelo JDBC - PGJDBC?
O Driver de conexão mais conhecido e usado para PostgreSQL em Java é o PGJDBC. Ele é tão famoso as pessoas pensam ser o único. Nesse post explicarei alguns comportamentos dessa biblioteca e dicas para você usar ele da forma correta.
O que acontece com uma queda de conexão?
O que acontece quando o software (e o driver PGJDBC) perde conexão com o PostgeSQL?
A conexão é encerrada e todas as tentativas de usá-la a partir daí retornarão uma exception.
Como lidar com isso? O PGJDBC implementa algum tipo de reconexão?
Infelizmente não, a recomendação é sempre usar o JDBC juntamente com um connection pool (tipo HikariCP).
Conheça mais sobre o HikariCP neste outro post aqui do blog.
Parâmetros de configuração da conexão
Ao criar uma conexão você pode definir alguns parâmetros para ela. Elas alteram como as consultas são executadas e como o driver e o banco otimizam as operações.
autocommit
Por padrão seu valor é true.
Se true, ao executar uma query o Driver automaticamente roda o comando COMMIT no final. Se você precisa usar transações, desabilite esse comando.
Se false, tudo que você mudar no banco e quiser salvar por definitivo é preciso enviar um COMMIT. Ao iniciar uma query, o Driver executa automaticamente o comando BEGIN.
Existem outros drivers de PostgreSQL para o Java?
Sim! O único concorrente viável até agora é PGJDBC-NG.
Ele implementa o sistema de envio de mensagens assíncronas do PostgreSQL: LISTEN - NOTIFY.
Entretanto o PGJDBC é muito mais antigo, testado e estável. Se você não precisa das funções avançadas que o PGJDBC-NG fornece, fique com o PGJDBC.
Referências
Documentação Oficial do PGJDBC
https://jdbc.postgresql.org/documentation/head/connect.html
Documentação Git Oficial do PGJDBC
https://github.com/pgjdbc/www/blob/master/documentation/94/connect.md
Sobre prepared statements
https://stackoverflow.com/questions/32297503/whats-the-life-span-of-a-postgresql-server-side-prepared-statement
Sobre prepared statements
https://use-the-index-luke.com/sql/explain-plan/postgres/concrete-planning
Sobre reconexão do PGJDBC
https://www.postgresql.org/message-id/[email protected]