El infame No Suitable Driver Found For JDBC y cómo corregirlo

Advertisements

Este error es muy común cuando el código realiza conexiones JDBC a la base de datos en tiempo de ejecución. Dado que la API de JDBC es parte del JDK, el código se compilará sin ningún problema, pero cuando la aplicación se ejecuta, puede generar ese error. Recuerde que la API de JDBC solo proporciona la interfaz (el contrato) pero sin ninguna implementación específica. Las implementaciones dependerán del motor de la base de datos que la aplicación necesita para conectarse, como MySQL, Postgres, Oracle, DB2, SQL Server, etc.

Y eso es un Driver, es solo una biblioteca (archivo jar) que implementa la API JDBC para una base de datos específica.

Al usar JDBC para conectar una base de datos en una aplicación Java, se deben hacer dos cosas antes de crear la conexión a la base de datos.

  • Agregue el driver (archivo jar) en el classpath de su aplicación. Esto se puede hacer con las opciones del IDE o si usa Maven/Gradle agregando la dependencia.
  • Registrar el driver antes de llamar al método DriverManager.getConnection por primera vez.

Si alguno de esos requisitos previos no se cumple, entonces la excepción java.sql.SQLException: No suitable driver found for jdbc: será lanzada.

Advertisements

¿Cómo registrar el Driver?

Es muy fácil, solo necesita agregar la siguiente línea antes de crear la conexión.

// load and register JDBC driver for MySQL 
Class.forName("com.mysql.jdbc.Driver");

El valor String del método forName dependerá del motor de la base de datos para conectarse. Esos son los valores más comunes.

Class.forName("oracle.jdbc.driver.OracleDriver");   // For Oracle 
Class.forName("org.postgresql.Driver");   			// For Postgress
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  // For MS-SQL Server
Class.forName("com.mysql.jdbc.Driver");				// For MySQL
Class.forName("com.ibm.db2.jcc.DB2Driver");			// For IBM DB2
Class.forName("org.mariadb.jdbc.Driver");   		// For MariaDB           

Este ejemplo, de código registrando el Driver antes de crear la conexión.

public class Main { 
  public static void main(String[] args) { 
  Connection dbConnection = null; 
    try { 
      String url = "jdbc:mysql://localhost:3306/test"; 
      Properties info = new Properties(); 
      info.put("user", "root"); 
      info.put("password", "test"); 
      
      Class.forName("com.mysql.jdbc.Driver");   //Registering the driver
      dbConnection = DriverManager.getConnection(url, info); 
      if (dbConnection != null) { 
        System.out.println("Successfully connected to MySQL database test"); 
      } 
    } catch (SQLException ex) { 
      System.out.println("An error occurred while connecting MySQL databse"); 
      ex.printStackTrace(); 
    } 
  } 
}

Referencias

Advertisements

Leave a Reply

Your email address will not be published. Required fields are marked *