web-dev-qa-db-de.com

Fehlerbehebung: "Kein geeigneter Treiber für jdbc: mysql: // localhost/dbname" bei Verwendung von Pools gefunden?

Ich versuche, eine Verbindung zu meiner Datenbank herzustellen. Wenn ich meinen Code mit der main-Methode teste, funktioniert das nahtlos. Beim Versuch, über Tomcat 7 darauf zuzugreifen, schlägt der Fehler fehl: 

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

Ich benutze Pooling. Ich habe in MySQL Connector (5.1.15), Dbcp (1.4) und Pool (1.4.5) Bibliotheken in WEB-INF/lib und in .classpath auch. Ich benutze Eclipse IDE. Mein Code für den Datenbanktreiber lautet:

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;
    }
}

Start meines Stack-Trace:

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

Was verursacht diesen Fehler?

86
Tamer

Versuchen Sie, den Treiber-Jar im Server-Lib-Ordner abzulegen. ($ CATALINA_HOME/lib) 

Ich glaube, dass der Verbindungspool eingerichtet werden muss, bevor die Anwendung instanziiert wird. (So ​​funktioniert es zumindest in Jboss)

52

Der Grund, warum Sie diesen Fehler erhalten haben:

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

Ist, weil Sie vergessen haben, Ihren MySQL-Treiber mit der Java-Anwendung zu registrieren.

Das hast du geschrieben:

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

Sollte das sein:

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);
}

Sie müssen das Handbuch Ihres jeweiligen mysql jdbc-Treibers lesen, um die genaue Zeichenfolge zu finden, die im Parameter Class.forName ("...") platziert werden soll.

Class.forName bei JDBC Version 4 nicht erforderlich

Mit Java 6 beginnend ist Class.forName("something.jdbc.driver.YourFubarDriver") nicht mehr erforderlich, wenn Sie einen aktuellen Treiber (JDBC v.4) verwenden. Weitere Informationen finden Sie hier: http://onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-Java-se-6.html

42
Eric Leschinski

Ich hatte das gleiche Problem bei der Verwendung von Tomcat7 mit mysql-connector-Java-5.1.26, das ich für alle Fälle sowohl in mein $ CATALINA_HOME/lib als auch in mein WEB-INF/lib eingegeben habe. Aber es würde es nicht finden, bis ich eine dieser beiden Anweisungen verwendet habe, bevor ich die Verbindung erhalten habe:

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

OR

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

Ich habe dann mysql-connector-Java-5.1.26 aus $ CATALINA_HOME/lib entfernt und die Verbindung funktioniert immer noch.

37
ybenjira

Wenn Sie Tomcat aus Eclipse heraus ausführen, wird die in CATALINA_HOME/lib gesetzte Bibliothek nicht ausgewählt. Es gibt zwei Möglichkeiten, dies zu beheben. Doppelklicken Sie in der Eclipse-Serveransicht auf den Tomcat-Server. Daraufhin wird die Tomcat-Plugin-Konfiguration geöffnet.

  1. Klicken Sie auf "Open Launch Config"> Registerkarte Classpath, und legen Sie den JJ-Speicherort für mysql-Connector/j fest
  2. Serverstandort> Wählen Sie die Option "Tomcat-Installation verwenden (Kontrolle über die Tomcat-Installation übernehmen)" aus.
8
bjethwan

Ich hatte die mysql jdbc-Bibliothek sowohl in $ CATALINA_HOME/lib als auch in WEB-INF/lib. Trotzdem bekam ich diesen Fehler. Ich brauchte Class.forName ("com.mysql.jdbc.Driver"); Damit es funktioniert.

4
nondescript

Ich hatte das gleiche Problem. Sie müssen lediglich die Klassenpfadumgebungsvariable für Tomcat definieren. Sie können dies tun, indem Sie eine Datei hinzufügen, in meinem Fall C:\Apache-Tomcat-7.0.30\bin\setenv.bat, die Folgendes enthält:

set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\lib\mysql-connector-Java-5.1.14-bin.jar"

dann Code in meinem Fall: 

Class.forName("com.mysql.jdbc.Driver").newInstance(); 
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database_name", "root", "");

funktioniert gut. 

3
test30

Bro, Sie können den Code auch wie folgt schreiben:

import Java.sql.*;
import Java.io.*;
public class InsertDatabase {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try
    {  
        Class.forName("com.mysql.jdbc.Driver");  
        Connection con=DriverManager.getConnection(  
        "jdbc:mysql://localhost:3306/Maulik","root","root");  

        Statement stmt=con.createStatement();  
        ResultSet rs=stmt.executeQuery("select * from Employee");  
        while(rs.next())  
        System.out.println(rs.getInt(1)+"  "+rs.getString(2)+"  "+rs.getString(3));  
        con.close();
    }

    catch(Exception e)
    {
        System.out.println(e);
    }

        }  

}
3
Maulik

füge das Artefakt von maven hinzu.

 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
    <version>5.1.6</version>
 </dependency>
2
Tunde Pizzle

Ich verwende Tomcat 7 in Eclipse mit Java 7 und verwende den jdbc-Treiber für MSSQL sqljdbc4.jar.

Wenn Sie den Code außerhalb von Tomcat über eine eigenständige Java-App ausführen, hat dies gut funktioniert:

        connection = DriverManager.getConnection(conString, user, pw);

Als ich jedoch versuchte, den gleichen Code in Tomcat 7 auszuführen, stellte ich fest, dass ich ihn nur zum Laufen bringen konnte, indem ich zunächst den Treiber registrierte und das oben genannte so veränderte:

        DriverManager.registerDriver(new com.Microsoft.sqlserver.jdbc.SQLServerDriver());
        connection = DriverManager.getConnection(conString, user, pw);
2
nick

Benutzen: 

try {

    Class.forName("com.mysql.jdbc.Driver").newInstance();
    System.out.println("Registro exitoso");

} catch (Exception e) {

    System.out.println(e.toString());

}

DriverManager.getConnection(..
2

Ich hatte auch vor einiger Zeit das gleiche Problem, aber ich habe dieses Problem gelöst.

Es kann verschiedene Gründe für diese Ausnahme geben. Eine der möglichen Ursachen ist, dass die JAR-Datei, die Sie zu Ihrem lib-Ordner hinzufügen, möglicherweise alt ist.

Versuchen Sie, die latest mysql-connector-jar-Version herauszufinden und fügen Sie dies Ihrem Klassenpfad ..__ hinzu. Dadurch wird möglicherweise Ihr Problem gelöst. Meine wurde so gelöst.

1
Ankit Pawar

Aus dem, was ich beobachtet habe, kann es zwei Gründe geben, dass diese Ausnahme auftritt: (1) Ihr Treibername ist nicht richtig geschrieben (2) Der Treiber wurde nicht ordnungsgemäß mit dem Java-Projekt verbunden. Schritte in Eclipse: (1) Erstellen Sie ein neues Java-Projekt . (2) Kopieren Sie die Connector-Jar-Datei (3) Klicken Sie mit der rechten Maustaste auf das Java-Projekt und fügen Sie es dort ein. (4) Klicken Sie mit der rechten Maustaste auf das Java-Projekt -> Eigenschaften -> Java-Erstellungspfad -> Bibliotheken -> Jar hinzufügen -> Wählen Sie Ihr Projekt aus (wählen Sie die JAR-Datei aus dem Dropdown-Menü aus) und klicken Sie auf OK. 

1
Abhishek J

wenn Sie Netbeans verwenden, müssen Sie den Mysql-JDBC-Treiber in der Bibliotheksliste des Projekts und in den Eigenschaften Ihres Projekts hinzufügen

1
Sérgio Silva

Die Lösung ist unkompliziert.

Stellen Sie sicher, dass der Datenbank-Connector über Ihr classpath erreichbar ist, wenn running das Programm nicht kompiliert, z.

Java -classpath .;c:\path\to\mysql-connector-Java-5.1.39.jar YourMainClass 

Wenn Sie eine ältere Version von Java (vor JDBC 4.0) verwenden, ist DriverManager.getConnection folgende Zeile erforderlich:

Class.forName("your.jdbc.driver.TheDriver"); // this line is not needed for modern Java
1
Pacerier

Meistens geschieht dies, weil zwei mysql-connector-Java-3.0.14-production-bin.jar-Datei . Eine im lib-Ordner von Tomcat und eine andere im Klassenpfad des Projekts. 

Versuchen Sie einfach, mysql-connector-Java-3.0.14-production-bin.jar aus dem lib-Ordner zu entfernen.

Auf diese Weise funktioniert es für mich.

1
RKP

Da niemand diese Antwort gegeben hat, möchte ich auch hinzufügen, dass Sie einfach die jdbc-Treiberdatei (in meinem Fall mysql-connector-Java-5.1.27-bin.jar) zum lib-Ordner Ihres Servers (in meinem Fall Tomcat) hinzufügen. Starten Sie den Server neu und es sollte funktionieren. 

0
Susie

Aus anderen Stackoverflow-Threads:

"Zweitens. Stellen Sie sicher, dass sich der MySQL JDBC - Treiber aka Connector/J im Klassenpfad von JMeter befindet. Wenn nicht, laden Sie ihn herunter, und entpacken Sie mysql-connector-Java-x.xx.xx-bin.jar in JMeters/lib JMeter-Neustart ist erforderlich, um die Bibliothek abzurufen. "

Bitte stellen Sie sicher, dass die .jar-Datei direkt zum lib-Ordner hinzugefügt wird.

0

Bei der Entwicklung mit Ubuntu (Xubuntu 12.04.1) muss ich Folgendes tun: 

Verwenden

Eclipse Juno (heruntergeladen, nicht über das Software-Center installiert), Tomcat 7 (in ein benutzerdefiniertes Benutzerverzeichnis heruntergeladen) ebenfalls als Server in Eclipse, Dynamic Web Project mit einem 3.0 Servlet, MySQL Server hinzugefügt auf localhost konfiguriert und getestet mit Benutzer und Kennwort (unbedingt testen) MySQL-Connector-Treiber 5.1.24 jar, 

Ich 'HAD', und ich wiederhole 'HAD', mit der Anweisung Class.Load ("com.mysql.jdbc.Driver") und dem Hinzufügen des Connector driver.jar, um im Lib-Ordner des Webprojekts zu sein, damit es funktioniert in dieser Situation.

WICHTIG !!: Nachdem Sie die driver.jar in die lib kopiert haben, müssen Sie Ihr Projekt in Eclipse aktualisieren, bevor Sie das Servlet über Tomcat ausführen.

Ich habe versucht, die Connector-Treiber-JAR-Datei über den Build-Pfad mit und ohne ClassLoad hinzuzufügen, aber es hat nicht funktioniert!

Ich hoffe, dass dies jedem hilft, der mit dieser spezifischen Situation beginnt: Die Java-Community bietet eine Menge Dokumentation, aber es gibt so viele Variablen, dass es schwierig ist, alle zu behandeln, und es macht den neuen Menschen sehr schwer.

Ich denke, wenn jemand erklären könnte, warum Class.Load hier (in dieser Situation) erforderlich ist, wäre es von Vorteil.

Genießen

0
MtlMike
  1. Legen Sie mysql-connector-Java-5.0.8-bin.jar in $ CATALINA_HOME/lib ab

  2. Überprüfen Sie den Verbindungsfehler auf Beispiel
    "jdbc: mysql: // localhost: 3306/report" ("report" ist hier der Datenbankname)

  3. Stellen Sie sicher, dass Sie den Computernamen verwenden (Beispiel: localhost anstelle der IP-Adresse (127.0.0.1)).
0
Bruce

Fügen Sie die Treiberklasse zum Bootstrapclasspath hinzu. Das Problem liegt in Java.sql.DriverManager, in dem die Treiber nicht angezeigt werden, die von ClassLoaders geladen wurden, außer vom Bootstrap ClassLoader.

0
arathim