¿Cómo solucionar el error "No se encontró ningún controlador adecuado para jdbc:mysql://localhost/dbname" al utilizar grupos? [duplicar]

Resuelto Tamer asked hace 13 años • 21 respuestas

Estoy intentando crear una conexión a mi base de datos, cuando pruebo mi código usando el método principal, funciona a la perfección. Sin embargo, al intentar acceder a él a través de Tomcat 7, se produce el error:

No suitable driver found for jdbc:mysql://localhost/dbname. 

Estoy usando la agrupación. Puse las bibliotecas del conector mysql (5.1.15), dbcp (1.4) y pool(1.4.5) en WEB-INF/lib y también en .classpath. Estoy usando Eclipse IDE. Mi código para el controlador de la base de datos es:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.tomcat.dbcp.dbcp.ConnectionFactory;
import org.apache.tomcat.dbcp.dbcp.DriverManagerConnectionFactory;
import org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory;
import org.apache.tomcat.dbcp.dbcp.PoolingDriver;
import org.apache.tomcat.dbcp.pool.impl.GenericObjectPool;

public class DatabaseConnector {
    public static String DB_URI = "jdbc:mysql://localhost/dbname";
    public static String DB_USER = "test";
    public static String DB_PASS = "password";

    // Singleton instance
    protected static DatabaseConnector _instance;

    protected String _uri;
    protected String _username;
    protected String _password;

    /**
     * Singleton, so no public constructor
     */
    protected DatabaseConnector(String uri, String username, String password) {
        _uri = uri;
        _username = username;
        _password = password;

        GenericObjectPool connectionPool = new GenericObjectPool(null);
        ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
            _uri, _username, _password);
        PoolableConnectionFactory poolableConnectionFactory =
            new PoolableConnectionFactory(connectionFactory, connectionPool,
                                            null, null, false, true);
        PoolingDriver driver = new PoolingDriver();
        driver.registerPool("test", connectionPool);
    }

    /**
     * Returns the singleton instance
     */
    public static DatabaseConnector getInstance() {
        if (_instance == null) {
            _instance = new DatabaseConnector(DB_URI, DB_USER, DB_PASS);
        }
        return _instance;
    }

    /**
     * Returns a connection to the database
     */
    public Connection getConnection() {
        Connection con = null;
        try {
            con = DriverManager.getConnection("jdbc:apache:commons:dbcp:test");
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return con;
    }
}

Inicio de mi seguimiento de pila:

Apr 5, 2011 9:49:14 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Login] in context with path [/Project] 
threw exception
java.lang.RuntimeException: java.sql.SQLException: 
No suitable driver found for jdbc:mysql://localhost/dbname

Que esta causando este error?

Tamer avatar Apr 06 '11 01:04 Tamer
Aceptado

Intente colocar el archivo jar del controlador en la carpeta lib del servidor. ($CATALINA_HOME/lib)

Creo que el grupo de conexiones debe configurarse incluso antes de crear una instancia de la aplicación. (Al menos así funciona en Jboss)

billygoat avatar Apr 05 '2011 18:04 billygoat

La razón por la que recibió este error:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/dbname

Es porque olvidó registrar su controlador jdbc de mysql con la aplicación java.

Esto es lo que escribiste:

Connection con = null;
try {
    con = DriverManager.getConnection("jdbc:apache:commons:dbcp:test");
} catch (SQLException e) {
    throw new RuntimeException(e);
}

Debería ser esto:

Connection con = null;
try {
    //registering the jdbc driver here, your string to use 
    //here depends on what driver you are using.
    Class.forName("something.jdbc.driver.YourFubarDriver");   
    con = DriverManager.getConnection("jdbc:apache:commons:dbcp:test");
} catch (SQLException e) {
    throw new RuntimeException(e);
}

Tendrá que leer el manual de su controlador mysql jdbc específico para encontrar la cadena exacta que debe colocar dentro del parámetro Class.forName("...").

Class.forName no es necesario con JDBC v.4

Comenzar con Java 6 Class.forName("something.jdbc.driver.YourFubarDriver")ya no es necesario si utiliza un controlador reciente (JDBC v.4). Para más detalles lea esto: http://onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-java-se-6.html

Eric Leschinski avatar Sep 14 '2011 17:09 Eric Leschinski

Tuve el mismo problema al usar Tomcat7 con mysql-connector-java-5.1.26 que puse tanto en mi $CATALINA_HOME/lib como en WEB-INF/lib, por si acaso. Pero no lo encontraría hasta que usara cualquiera de estas dos declaraciones antes de obtener la conexión:

DriverManager.registerDriver(new com.mysql.jdbc.Driver ());

O

Class.forName("com.mysql.jdbc.Driver");

Luego seguí eliminando mysql-connector-java-5.1.26 de $CATALINA_HOME/lib y la conexión aún funciona.

ybenjira avatar Oct 08 '2013 22:10 ybenjira

Cuando ejecuta Tomcat fuera de eclipse, no selecciona la biblioteca configurada en CATALINA_HOME/lib, hay dos formas de solucionarlo. Haga doble clic en el servidor Tomcat en la vista de servidores eclipse, se abrirá la configuración del complemento Tomcat y luego:

  1. Haga clic en "Abrir configuración de inicio" > pestaña Classpath y configure la ubicación del conector mysql/j jar. o
  2. Ubicación del servidor > seleccione la opción que dice "Usar la instalación de Tomcat (tome el control de la instalación de Tomcat)"
bjethwan avatar Jan 04 '2014 20:01 bjethwan