Comment corriger:" aucun pilote approprié trouvé pour jdbc: mysql://localhost/dbname " erreur lors de l'utilisation de pools? [dupliquer]

cette question a déjà une réponse ici:

  • l'infâme java.SQL.SQLException: Aucun pilote approprié trouvé 9 réponses

j'essaie de créer une connexion à ma base de données, quand je mets à l'essai mon code en utilisant la méthode principale, ça marche parfaitement. Toutefois, lorsqu'on essaie de accès par Tomcat 7, il échoue avec erreur:

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

j'utilise la mise en commun. Je l'ai mis dans mysql connector (5.1.15), dbcp (1.4) , et de la piscine(1.4.5) des bibliothèques dans WEB-INF/lib et dans .classpath. Je suis à l'aide de l'IDE Eclipse. Mon code pour le pilote de base de données est:

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

début de la trace de ma pile:

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

Quelle est la cause de cette erreur?

83
demandé sur Tamer 2011-04-05 22:30:27

21 réponses

essayez de placer le pot de pilotes dans le dossier lib du serveur. ($CATALINA_HOME/lib)

je crois que le pool de connexion doit être mis en place avant même l'application est instancié. (Du moins c'est comme ça que ça marche à Jboss)

49
répondu uncaught_exceptions 2011-04-05 18:57:41

la raison pour laquelle vous avez eu cette erreur:

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

est parce que vous avez oublié d'enregistrer votre pilote mysql jdbc avec l'application java.

C'est ce que vous avez écrit:

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

devrait être:

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

vous aurez à lire le manuel sur votre pilote mysql JDBC spécifique pour trouver la chaîne exacte à placer à l'intérieur de la Classe.forName ("...") paramètre.

de la Classe.forName not required with JDBC v. 4

à partir de Java 6, Class.forName("something.jdbc.driver.YourFubarDriver") n'est plus nécessaire si vous utilisez un pilote récent (JDBC v. 4). Pour plus de détails lire: http://onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-java-se-6.html

39
répondu Eric Leschinski 2012-12-14 15:28:52

J'ai eu le même problème en utilisant Tomcat7 avec mysql-connector-java-5.1.26 que j'ai mis dans mon $CATALINA_HOME/lib et WEB-INF/lib, juste au cas où. Mais il ne l'a pas trouvé jusqu'à ce que j'ai utilisé l'un ou l'autre de ces deux énoncés avant d'obtenir la connexion:

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

ou

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

j'ai alors suivi avec la suppression mysql-connector-java-5.1.26 de $ CATALINA_HOME / lib et le la connexion fonctionne toujours.

33
répondu ybenjira 2013-10-08 22:26:35

quand vous lancez tomcat hors d'eclipse il ne sélectionnera pas la lib définie dans CATALINA_HOME/lib , il y a deux façons de la corriger. Double clic sur Tomcat server dans la vue eclipse servers, il ouvrira la configuration du plugin tomcat, puis soit:

  1. cliquez sur" Ouvrir La Fenêtre de lancement " > l'onglet Classpath définit l'emplacement du connecteur mysql/jar. ou
  2. emplacement du serveur > sélectionner l'option qui dit " utiliser L'installation Tomcat (prendre le contrôle de L'installation Tomcat)"
8
répondu bjethwan 2014-01-04 20:37:38

j'avais la bibliothèque mysql jdbc en $CATALINA_HOME/lib et WEB-INF/lib, mais j'ai eu cette erreur . J'avais besoin de la Classe.forName ("com.mysql.jdbc.Driver"); pour le faire fonctionner.

4
répondu nondescript 2014-11-05 15:58:29

j'ai eu le même problème, tout ce que vous devez faire est de définir classpath variable d'environnement pour tomcat, vous pouvez le faire en ajoutant un fichier ,dans mon cas C:\apache-tomcat-7.0.30\bin\setenv.bat , contenant:

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

puis code, dans mon cas:

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

fonctionne très bien.

3
répondu test30 2013-04-11 08:57:04

J'exécute Tomcat 7 dans Eclipse avec Java 7 et j'utilise le pilote jdbc pour MSSQL sqljdbc4.pot.

lors de l'exécution du code en dehors de tomcat, à partir d'une application java autonome, cela a très bien fonctionné:

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

cependant, quand j'ai essayé D'exécuter le même code à L'intérieur de Tomcat 7, j'ai trouvé que je ne pouvais le faire fonctionner qu'en enregistrant d'abord le pilote, en changeant le ci-dessus à ceci:

        DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
        connection = DriverManager.getConnection(conString, user, pw);
2
répondu nick 2014-10-21 20:51:12

ajouter l'artefact de maven.

 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
 </dependency>
2
répondu Tunde Pizzle 2016-10-01 12:17:48

utiliser:

try {

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

} catch (Exception e) {

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

}

DriverManager.getConnection(..
2
répondu Joan Payano Camacho 2016-12-27 00:22:38

mon frère, vous pouvez aussi écrire le code comme ci-dessous:

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

        }  

}
2
répondu Maulik 2017-01-30 11:03:26

si vous utilisez netbeans vous devez ajouter Mysql pilote JDBC dans la liste de la bibliothèque du projet, dans les propriétés de votre projet

1
répondu Sérgio Silva 2012-10-11 04:09:36

j'ai aussi eu le même problème quelque temps auparavant, mais j'ai résolu ce problème.

il peut y avoir différentes raisons à cette exception. Et l'un d'eux est peut-être que le pot que vous ajoutez à votre dossier lib peut-être vieux.

essayez de trouver la dernière version de mysql-connector-jar et ajoutez cela à votre chemin de classe. Ça pourrait résoudre votre problème. La mienne a été résolue comme ça.

1
répondu Ankit Pawar 2013-01-10 07:31:49

la plupart du temps, cela arrive parce que deux mysql-connecteur-java-3.0.14-production-bin.fichier jar. Une dans le dossier lib de tomcat et une autre dans classpath du projet.

essayez simplement de supprimer mysql-connector-java-3.0.14-production-bin.jar du dossier lib.

de cette façon, ça marche pour moi.

1
répondu RKP 2014-06-03 12:35:38

D'après ce que j'ai observé, il pourrait y avoir deux raisons pour que cette Exception se produise: (1) Votre Nom de pilote n'est pas épelé correctement. (2)Driver n'a pas été associé correctement au projet Java Étapes à suivre dans Eclipse: (1) Créer un nouveau projet Java. (2)Copier le fichier Jar connecteur (3)Faites un clic droit sur le projet Java et collez-le là. (4)clic Droit sur le projet Java -> Propriétés ->Java Build Path - >bibliothèques-> Add Jar ->choisir un projet d'ur(sélectionnez le fichier jar de liste déroulante et cliquez sur ok.

1
répondu Abhishek J 2015-02-10 01:14:48

la solution est simple.

assurez-vous que le connecteur de la base de données peut être atteint par votre classpath quand exécuter (ne pas compiler) le programme, par exemple:

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

aussi, si vous utilisez une ancienne version de Java (pré JDBC 4.0), avant de faire DriverManager.getConnection cette ligne est nécessaire:

Class.forName("your.jdbc.driver.TheDriver"); // this line is not needed for modern Java
1
répondu Pacerier 2017-03-20 20:59:05

lors du développement en utilisant Ubuntu (Xubuntu 12.04.1) je "devais" faire ce qui suit:

utilisant

Eclipse Juno (téléchargé, non installé via le software centre), Tomcat 7 (téléchargé dans un répertoire utilisateur personnalisé) également ajouté comme serveur dans Eclipse, Projet web dynamique avec un Servlet 3.0, MySQL Serveur sur localhost configuré et testé avec l'utilisateur et mot de passe (assurez - vous de tester) Connecteur MySQL driver 5.1.24 jar,

J'ai "eu", et je répète "eu", pour nous la classe.Load ("com.mysql.jdbc.Pilote") avec l'ajout du connecteur pilote.pot à être dans le projet web dossier lib pour qu'il fonctionne dans cette situation.

IMPORTANT!! après avoir copié le pilote.jar à la lib assurez-vous de rafraîchir votre projet dans Eclipse avant d'exécuter le servlet via Tomcat.

j'ai essayé d'ajouter le fichier JAR du pilote de connecteur via le chemin de construction avec et sans ClassLoad mais il n'a pas travail!

J'espère que cela aidera quiconque commence le développement avec cette situation spécifique: la communauté Java fournit beaucoup de documentation mais il y a tellement de variables qu'il est difficile de les couvrir toutes et cela rend les choses très difficiles pour le nouveau.

je pense que si quelqu'un pouvait expliquer pourquoi la classe.La charge est nécessaire ici (dans cette situation), il serait bénéfique.

Profiter

0
répondu MtlMike 2013-03-14 19:06:12

puisque personne n'a donné cette réponse, je voudrais aussi ajouter que, vous pouvez simplement ajouter le fichier pilote jdbc ( mysql-connector-java-5.1.27-bin.jar dans mon cas) dans le dossier lib de votre serveur(Tomcat dans mon cas). Redémarrez le serveur et ça devrait marcher.

0
répondu Susie 2013-12-03 17:51:00
  1. Mettre mysql-connector-java-5.0.8-bin.jar in $CATALINA_HOME / lib

  2. vérification de l'url de connexion, exemple

    "jdbc:mysql://localhost:3306/report ("rapport" est ici le nom db)

  3. assurez-vous d'utiliser le nom de la machine (exemple : localhost au lieu de l'adresse ip (127.0.0.1))
0
répondu Bruce 2015-08-15 12:08:28

ajouter la classe driver au chemin bootstrapclass. Le problème est en java.SQL.DriverManager qui ne voit pas les pilotes chargés par ClassLoaders autre que bootstrap ClassLoader.

0
répondu arathim 2015-10-27 22:05:41

à partir d'un autre filetage à effet de débordement:

"Deuxième. Assurez-vous que vous avez MySQL pilote JDBC alias Connecteur/J dans le chemin de classe de JMeter. Si vous ne le téléchargez pas, déballez mysql - connector-java-X. xx.xx-bin.pot à JMeter /lib de dossier. JMeter redémarrage sera nécessaire de choisir la bibliothèque"

s'il vous Plaît assurez-vous que .le fichier jar est ajouté directement dans le dossier lib.

0
répondu adrian filipescu 2016-04-25 17:47:09

vous pouvez coller le pot dans le chemin du temps de course de jboss comme ceci:

C:\User\user\workspace\jboss-as-web-7.0.0.Final\autonome\déploiements\MYapplicationEAR.l'oreille\test.war\WEB-INF\lib ca marche à 100%

-2
répondu user4983785 2015-06-07 18:20:09