La infame java.sql.SQLException:No se encontró un controlador adecuado
Esta excepción puede tener básicamente dos causas:
#1. El controlador JDBC no está cargado
Debe asegurarse de que el controlador JDBC esté ubicado en el propio servidor /lib
carpeta.
O, cuando en realidad no está utilizando una fuente de datos de grupo de conexiones administrada por el servidor, pero está jugando manualmente con DriverManager#getConnection()
en WAR, entonces debe colocar el controlador JDBC en /WEB-INF/lib
de WAR y realizar ..
Class.forName("com.example.jdbc.Driver");
.. en tu código antes el primer DriverManager#getConnection()
llamada en la que se asegura de que no tragar/ignorar cualquier ClassNotFoundException
que puede lanzar y continuar el flujo de código como si nada excepcional hubiera pasado. Consulte también ¿Dónde debo colocar el controlador JDBC para el conjunto de conexiones de Tomcat?
#2. O bien, la URL de JDBC tiene una sintaxis incorrecta
Debe asegurarse de que la URL de JDBC se ajuste a la documentación del controlador JDBC y tenga en cuenta que generalmente distingue entre mayúsculas y minúsculas. Cuando la URL de JDBC no devuelve true
para Driver#acceptsURL()
para cualquiera de los controladores cargados, también obtendrá exactamente esta excepción.
En el caso de PostgreSQL está documentado aquí.
Con JDBC, una base de datos se representa mediante una URL (Localizador Uniforme de Recursos). Con PostgreSQL™, esto toma una de las siguientes formas:
jdbc:postgresql:database
jdbc:postgresql://host/database
jdbc:postgresql://host:port/database
En el caso de MySQL está documentado aquí.
El formato general de una URL de JDBC para conectarse a un servidor MySQL es el siguiente, con elementos entre corchetes ([ ]
) siendo opcional:
jdbc:mysql://[host1][:port1][,[host2][:port2]]...[/[database]] » [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]
En el caso de Oracle está documentado aquí.
Hay 2 sintaxis de URL, la sintaxis antigua que solo funcionará con SID y la nueva con el nombre de servicio de Oracle.
Sintaxis antigua jdbc:oracle:thin:@[HOST][:PORT]:SID
Nueva sintaxis jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
###Véase también:
- ¿Dónde tengo que colocar el controlador JDBC para el conjunto de conexiones de Tomcat?
- Cómo instalar el controlador JDBC en un proyecto web de Eclipse sin enfrentar java.lang.ClassNotFoundexception
- ¿Cómo debo conectarme a la base de datos/fuente de datos JDBC en una aplicación basada en servlet?
- ¿Cuál es la diferencia entre "Class.forName()" y "Class.forName().newInstance()"?
- Conectar Java a una base de datos MySQL