Hospedagem Segura — página inicial

Docker e aplicações

Drivers JDBC: o que são, como funcionam e quais usar em 2026

JDBC é a API padrão do Java para falar com bancos de dados, e o driver é o JAR que leva essas chamadas ao PostgreSQL, ao MySQL, ao MariaDB ou ao SQL Server. Veja como funciona, as versões atuais de cada driver, a URL de conexão, os erros mais comuns e o pool HikariCP, com testes reais.

  • Por equipe técnica da Hospedagem Segura
  • Atualizado em 10/10/2026
  • 9 min de leitura

Texto do artigo

Neste artigo
  1. O que é JDBC e o que faz um driver JDBC
  2. Como o driver JDBC funciona: DriverManager, DataSource e URL
  3. Drivers JDBC atuais para MySQL, MariaDB, PostgreSQL e SQL Server
  4. Testando o driver JDBC com um programa mínimo
  5. Erros comuns com drivers JDBC
  6. Pool de conexões com HikariCP
  7. Onde rodar a aplicação Java e o banco
  8. Perguntas frequentes

JDBC (Java Database Connectivity) é a API padrão do Java para conversar com bancos de dados relacionais, e o driver JDBC é a biblioteca, um arquivo JAR, que faz essa conversa com um banco específico: PostgreSQL, MySQL, MariaDB ou SQL Server. Muita gente procura por "JBDC", com as letras trocadas; é o mesmo assunto, e o nome certo é JDBC.

Para uma aplicação Java acessar o banco, são duas peças: a API, que já vem no JDK (pacotes java.sql e javax.sql), e o driver do banco, que você adiciona ao projeto. O código usa sempre as mesmas interfaces (Connection, PreparedStatement, ResultSet) e o driver traduz cada chamada para o protocolo de rede do banco. Por isso, trocar de banco quase sempre se resume a trocar o driver e a URL de conexão.

O que é JDBC e o que faz um driver JDBC

A especificação em vigor é a JDBC 4.3, presente no Java desde a versão 9. Ela só define as interfaces; quem as implementa é o fabricante de cada banco. Os drivers atuais são do chamado tipo 4: escritos em Java puro, falam direto com o servidor pela rede e não dependem de biblioteca nativa instalada no sistema. O mesmo JAR funciona em Linux, Windows ou macOS.

O caminho de uma consulta é sempre este:

  1. A aplicação pede uma conexão informando a URL, o usuário e a senha.
  2. O driver abre a conexão TCP com o servidor do banco e faz a autenticação.
  3. A aplicação envia o SQL por um PreparedStatement e lê as linhas num ResultSet.
  4. A conexão é fechada ou devolvida ao pool de conexões.

Como o driver JDBC funciona: DriverManager, DataSource e URL

Há duas formas de pedir a conexão. A mais simples é o DriverManager: você chama DriverManager.getConnection(url, usuario, senha) e ele escolhe, entre os drivers carregados, o que aceita aquela URL. Desde o JDBC 4, o driver se registra sozinho quando o JAR está no classpath; o Class.forName("org.postgresql.Driver") dos tutoriais antigos não é mais necessário.

A outra é o DataSource, que a própria documentação do Java aponta como o meio preferido. Em aplicações de verdade, o DataSource costuma ser um pool, como o HikariCP, que mantém algumas conexões abertas e as reaproveita.

Quem identifica o banco é a URL, no formato jdbc:subprotocolo:endereço. Estes são os formatos dos quatro bancos mais comuns, com as portas padrão e a opção de SSL de cada driver:

jdbc:postgresql://198.51.100.20:5432/loja?sslmode=verify-full
jdbc:mysql://198.51.100.30:3306/loja?sslMode=REQUIRED
jdbc:mariadb://198.51.100.40:3306/loja?sslMode=verify-full
jdbc:sqlserver://198.51.100.50:1433;databaseName=loja;encrypt=true
Cada URL foi aceita pelo driver correspondente no teste. No SQL Server, as opções vêm separadas por ponto e vírgula.

O nome do parâmetro de SSL muda de driver para driver, e o padrão também: o pgJDBC usa prefer (criptografa se o servidor oferecer, sem validar o certificado), o Connector/J do MySQL usa PREFERRED e o driver da MariaDB vem com o SSL desligado. Usuário e senha ficam fora da URL: passe-os no getConnection, lidos de variáveis de ambiente ou de um arquivo de configuração com permissão restrita.

Drivers JDBC atuais para MySQL, MariaDB, PostgreSQL e SQL Server

Versões conferidas no Maven Central e na documentação de cada fabricante em outubro de 2026:

  • PostgreSQL: pgJDBC 42.7.14 (org.postgresql:postgresql), para Java 8 ou mais novo. Saiu em 7/10/2026 com duas correções de segurança; quem usa uma 42.7.x anterior deve atualizar.
  • MySQL: Connector/J 26.7.0 (com.mysql:mysql-connector-j). A numeração passou a acompanhar a do servidor MySQL, que agora usa ano e mês (26.7 = julho de 2026), e a 26.7.0 substitui a 9.7. Suporta MySQL 8.4 ou mais novo e Java 8 ou mais novo. As coordenadas antigas, mysql:mysql-connector-java, pararam na 8.0.33.
  • MariaDB: MariaDB Connector/J 3.5.10 (org.mariadb.jdbc:mariadb-java-client), compatível com Java 8 a 25. A URL começa com jdbc:mariadb:.
  • SQL Server: Microsoft JDBC Driver 13.6.0 (com.microsoft.sqlserver:mssql-jdbc), lançado em 10/09/2026. A versão termina em .jre11 para Java 11 ou mais novo, ou em .jre8 para Java 8.

Com Maven ou Gradle, basta declarar a dependência no projeto:

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.7.14</version>
</dependency>
No Gradle, a mesma dependência é implementation("org.postgresql:postgresql:42.7.14"). Para os outros bancos, use as coordenadas da lista.

Sem ferramenta de build, baixe o JAR direto do Maven Central e confira o hash publicado ao lado do arquivo antes de colocar em produção:

Terminal baixando do Maven Central os drivers JDBC do PostgreSQL, MySQL, MariaDB e SQL Server e conferindo o SHA-1 do pgJDBC
Os quatro drivers baixados do Maven Central; o sha1sum -c confirma que o JAR do pgJDBC é o mesmo publicado.

Testando o driver JDBC com um programa mínimo

Para saber se o driver, a rede e o usuário estão certos, nada melhor que um programa curto que conecta e pergunta a versão do banco. Este é o que usamos nos testes, com Java 21:

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class VersaoBanco {
    public static void main(String[] args) throws Exception {
        String url = System.getenv("DB_URL");
        String usuario = System.getenv("DB_USER");
        String senha = System.getenv("DB_PASSWORD");

        try (Connection conn = DriverManager.getConnection(url, usuario, senha)) {
            DatabaseMetaData meta = conn.getMetaData();
            System.out.println("Driver: " + meta.getDriverName() + " " + meta.getDriverVersion());
            System.out.println("JDBC:   " + meta.getJDBCMajorVersion() + "." + meta.getJDBCMinorVersion());
            System.out.println("Banco:  " + meta.getDatabaseProductName() + " " + meta.getDatabaseProductVersion());

            try (Statement st = conn.createStatement();
                 ResultSet rs = st.executeQuery("SELECT version()")) {
                rs.next();
                System.out.println("SELECT version(): " + rs.getString(1));
            }
        }
    }
}
VersaoBanco.java: lê a conexão de variáveis de ambiente, mostra os metadados do driver e executa SELECT version().

A URL, o usuário e a senha ficam num arquivo banco.env com permissão 600, carregado no shell antes de rodar. Assim a senha não aparece no código, no histórico do terminal nem na lista de processos do servidor.

Terminal compilando VersaoBanco.java e conectando ao PostgreSQL 17.11 com o driver pgJDBC 42.7.14
Com o pgJDBC no classpath, o programa conecta ao PostgreSQL 17.11 e mostra a versão do driver e do banco.

O mesmo código, sem mudar uma linha, conecta ao MySQL e ao MariaDB. Mudam só a URL e o JAR no classpath:

Terminal executando o mesmo programa Java contra o MySQL 8.4 com o Connector/J 26.7.0 e contra o MariaDB 11.8 com o MariaDB Connector/J 3.5.10
Mesmo programa, outro driver: MySQL 8.4.11 com o Connector/J e MariaDB 11.8.9 com o driver da MariaDB.

Os três drivers informam JDBC 4.2, a versão da especificação que declaram implementar, e rodam normalmente no Java 21.

Erros comuns com drivers JDBC

No suitable driver found

Nenhum driver carregado aceitou a URL. As causas são quase sempre duas: o JAR não está no classpath (ou ficou de fora do pacote da aplicação) ou o prefixo da URL está errado. Para conferir, liste os drivers registrados com DriverManager.drivers():

Terminal listando os quatro drivers JDBC registrados e, em seguida, o erro No suitable driver found ao rodar o programa sem o JAR do PostgreSQL
Com os JARs no classpath, os quatro drivers se registram sozinhos; sem o JAR, o DriverManager responde No suitable driver found.

O mesmo erro aparece quando se usa o driver da MariaDB com uma URL jdbc:mysql:. Desde a versão 3, ele só aceita esse prefixo com a opção permitMysqlScheme na URL.

Loading class com.mysql.jdbc.Driver. This is deprecated

É só um aviso: a classe do driver do MySQL agora é com.mysql.cj.jdbc.Driver. Melhor ainda é apagar a linha do Class.forName, porque o driver se registra sozinho.

Public Key Retrieval is not allowed

Acontece no MySQL 8.4 quando a conexão é feita sem SSL (sslMode=DISABLED) com um usuário que usa o método de autenticação padrão, caching_sha2_password. A correção é manter o SSL ligado. O parâmetro allowPublicKeyRetrieval=true também faz o erro sumir, mas manda o cliente aceitar a chave pública que o servidor enviar, sem verificação; deixe-o para redes de teste.

Pool de conexões com HikariCP

Abrir uma conexão custa caro: há o aperto de mão TCP, a negociação de SSL e a autenticação. Numa aplicação web, abrir uma por requisição pesa no tempo de resposta e pode esgotar o limite do banco (o max_connections do PostgreSQL vem com 100). O pool mantém algumas conexões abertas e as empresta ao código. O HikariCP é o mais usado: o Spring Boot o escolhe automaticamente quando ele está no projeto. A versão atual é a 7.1.0 (com.zaxxer:HikariCP), para Java 11 ou mais novo.

HikariConfig config = new HikariConfig();
config.setJdbcUrl(System.getenv("DB_URL"));
config.setUsername(System.getenv("DB_USER"));
config.setPassword(System.getenv("DB_PASSWORD"));
config.setPoolName("loja");
config.setMaximumPoolSize(5);

HikariDataSource ds = new HikariDataSource(config);
Configuração do pool. Daí em diante, o código pede a conexão com ds.getConnection(), e o close() feito pelo try-with-resources devolve a conexão ao pool em vez de fechá-la.

Os padrões do HikariCP são 10 conexões no máximo, 30 segundos de espera por uma conexão livre e 30 minutos de vida para cada conexão. Some o tamanho do pool de todas as instâncias da aplicação e mantenha o total abaixo do limite do banco. O passo a passo completo, com SSL e os erros de conexão mais comuns, está no artigo sobre conexão PostgreSQL em Java.

Onde rodar a aplicação Java e o banco

Uma API em Java com banco próprio precisa de um servidor em que você instale a versão do Java que quiser, mantenha o banco escutando só onde deve e controle o firewall. Na mesma máquina, deixe o banco atendendo apenas em localhost; em máquinas separadas, libere a porta do banco só para o IP da aplicação. A VPS Linux da Hospedagem Segura entrega esse cenário com acesso root, armazenamento NVMe e IPv4 dedicado, com Ubuntu, Debian, AlmaLinux ou Rocky Linux. A administração e o backup ficam com você; se preferir receber a VPS pronta, com backups periódicos e ajuda técnica mensal, a opção é o VPS Assistido.

Perguntas frequentes

O que é JBDC?

JBDC é um erro de digitação comum de JDBC (Java Database Connectivity), a API padrão do Java para acessar bancos de dados. Quem busca "driver JBDC" ou "conexão JBDC" procura o driver JDBC do banco e a forma de conectar uma aplicação Java a ele.

Qual a diferença entre JDBC e driver JDBC?

JDBC é a API, o conjunto de interfaces que já vem no Java; o driver é a implementação dessa API para um banco específico, distribuída pelo fabricante como um JAR. Sem o driver do banco no classpath, a aplicação não consegue conectar.

Preciso usar Class.forName para carregar o driver JDBC?

Não. Desde o JDBC 4, os drivers se registram sozinhos pelo mecanismo de service provider do Java quando o JAR está no classpath. O Class.forName ainda funciona, mas é desnecessário.

O driver do MySQL funciona com MariaDB?

Use o driver de cada banco: MySQL Connector/J para MySQL e MariaDB Connector/J para MariaDB. A documentação do Connector/J 26.7 declara suporte ao MySQL 8.4 ou mais novo, e o driver da MariaDB usa a URL jdbc:mariadb: e só aceita jdbc:mysql: com a opção permitMysqlScheme.

Qual a versão mais recente do driver JDBC do PostgreSQL?

Em outubro de 2026, a versão mais recente do pgJDBC é a 42.7.14, de 7/10/2026, que corrigiu duas falhas de segurança das versões 42.7.x anteriores. Ela funciona com Java 8 ou mais novo e está no Maven Central como org.postgresql:postgresql.

Leia também

Seu Java e seu banco, do seu jeito

VPS Linux com acesso root, armazenamento NVMe e IPv4 dedicado para rodar a aplicação Java e o banco de dados que você escolher.