O infame java.sql.SQLException:Nenhum driver adequado encontrado
Essa exceção pode ter basicamente dois causas:
#1. O driver JDBC não está carregado
Você precisa garantir que o driver JDBC seja colocado no próprio servidor
/lib
pasta. Ou, quando você não está realmente usando uma fonte de dados de pool de conexões gerenciada pelo servidor, mas está mexendo manualmente com
DriverManager#getConnection()
no WAR, então você precisa colocar o driver JDBC no arquivo /WEB-INF/lib
do WAR e realizar.. Class.forName("com.example.jdbc.Driver");
.. em seu código antes o primeiro
DriverManager#getConnection()
chamada pela qual você se certifica de que não engolir/ignorar qualquer ClassNotFoundException
que pode ser lançado por ele e continuar o fluxo de código como se nada de excepcional tivesse acontecido. Consulte também Onde devo colocar o driver JDBC para o pool de conexões do Tomcat? #2. Ou, a URL JDBC está na sintaxe errada
Você precisa garantir que a URL JDBC esteja em conformidade com a documentação do driver JDBC e lembre-se de que geralmente diferencia maiúsculas de minúsculas. Quando a URL JDBC não retorna
true
para Driver#acceptsURL()
para qualquer um dos drivers carregados, você também obterá exatamente essa exceção. No caso do PostgreSQL está documentado aqui.
Com JDBC, um banco de dados é representado por uma URL (Uniform Resource Locator). Com o PostgreSQL™, isso assume uma das seguintes formas:
jdbc:postgresql:database
jdbc:postgresql://host/database
jdbc:postgresql://host:port/database
No caso de MySQL está documentado aqui.
O formato geral para uma URL JDBC para conexão com um servidor MySQL é o seguinte, com itens entre colchetes ([ ]
) sendo opcional:
jdbc:mysql://[host1][:port1][,[host2][:port2]]...[/[database]] » [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]
No caso do Oracle está documentado aqui.
Existem 2 sintaxes de URL, sintaxe antiga que funcionará apenas com SID e a nova com o nome do serviço Oracle.
Sintaxe antigajdbc:oracle:thin:@[HOST][:PORT]:SID
Nova sintaxejdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
###Veja também:
- Onde devo colocar o driver JDBC para o pool de conexões do Tomcat?
- Como instalar o driver JDBC no projeto da web Eclipse sem enfrentar java.lang.ClassNotFoundexception
- Como devo me conectar ao banco de dados / fonte de dados JDBC em um aplicativo baseado em servlet?
- Qual é a diferença entre "Class.forName()" e "Class.forName().newInstance()"?
- Conectar Java a um banco de dados MySQL