Comment réparer: “Aucun pilote approprié trouvé pour jdbc: mysql: // localhost / dbname” erreur lors de l’utilisation des pools?

J’essaie de créer une connexion à ma firebase database, lorsque je mets à l’essai mon code en utilisant la méthode principale, cela fonctionne parfaitement. Cependant, en essayant d’y accéder via Tomcat 7, il échoue avec l’erreur:

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

J’utilise la mise en commun. Je mets également les bibliothèques mysql connector (5.1.15), dbcp (1.4) et pool (1.4.5) dans WEB-INF / lib et dans .classpath. J’utilise Eclipse IDE. Mon code pour le pilote de firebase database est le suivant:

 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 Ssortingng DB_URI = "jdbc:mysql://localhost/dbname"; public static Ssortingng DB_USER = "test"; public static Ssortingng DB_PASS = "password"; // Singleton instance protected static DatabaseConnector _instance; protected Ssortingng _uri; protected Ssortingng _username; protected Ssortingng _password; /** * Singleton, so no public constructor */ protected DatabaseConnector(Ssortingng uri, Ssortingng username, Ssortingng 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 stack:

 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 

Qu’est ce qui cause cette erreur?

Essayez de mettre le pilote jar dans le dossier lib du serveur. ($ CATALINA_HOME / lib)

Je crois que le pool de connexions doit être configuré avant même que l’application soit instanciée. (Au moins, c’est comme ça que ça marche dans Jboss)

La raison pour laquelle vous avez cette erreur:

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

C’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 ceci:

 Connection con = null; try { //registering the jdbc driver here, your ssortingng 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 devrez lire le manuel de votre pilote mysql jdbc spécifique pour trouver la chaîne exacte à placer dans le paramètre Class.forName (“…”).

Class.forName non requirejs avec 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, lisez ceci: http://onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-java-se-6.html

J’ai eu le même problème avec Tomcat7 avec mysql-connector-java-5.1.26 que j’ai mis dans mes $ CATALINA_HOME / lib et WEB-INF / lib, juste au cas où. Mais il ne le trouverait pas avant d’avoir utilisé l’une de ces deux déclarations avant d’obtenir la connexion:

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

OU

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

J’ai ensuite poursuivi en supprimant mysql-connector-java-5.1.26 de $ CATALINA_HOME / lib et la connexion fonctionne toujours.

Lorsque vous exécutez tomcat hors eclipse, il ne choisira pas le lib défini dans CATALINA_HOME/lib , il y a deux manières de le réparer. Double-cliquez sur le serveur Tomcat dans la vue des serveurs eclipse, cela ouvrira la configuration du plug-in tomcat, puis:

  1. Cliquez sur “Ouvrir Launch Config”> onglet Classpath définissez l’emplacement du connecteur mysql / j jar. ou
  2. Emplacement du serveur> sélectionnez l’option “Utiliser l’installation de Tomcat (prenez le contrôle de l’installation de Tomcat)”

J’avais la bibliothèque mysql jdbc dans $ CATALINA_HOME / lib et WEB-INF / lib, mais j’ai quand même eu cette erreur. J’ai eu besoin de Class.forName (“com.mysql.jdbc.Driver”); pour que ça marche.

J’ai eu le même problème, il suffit de définir la variable d’environnement classpath 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" 

alors code, dans mon cas:

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

fonctionne bien

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

Lorsque vous exécutez le code en dehors de tomcat, à partir d’une application Java autonome, cela fonctionne parfaitement:

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

Cependant, lorsque j’ai essayé d’exécuter le même code à l’intérieur de Tomcat 7, j’ai constaté que je ne pouvais le faire fonctionner qu’en enregistrant d’abord le pilote, en changeant ce qui suit:

  DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver()); connection = DriverManager.getConnection(conSsortingng, user, pw); 

Utilisation:

 try { Class.forName("com.mysql.jdbc.Driver").newInstance(); System.out.println("Registro exitoso"); } catch (Exception e) { System.out.println(e.toSsortingng()); } DriverManager.getConnection(.. 

Bro, vous pouvez également écrire le code ci-dessous:

 import java.sql.*; import java.io.*; public class InsertDatabase { public static void main(Ssortingng[] 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.getSsortingng(2)+" "+rs.getSsortingng(3)); con.close(); } catch(Exception e) { System.out.println(e); } } } 

Si vous utilisez netbeans, vous devez append le pilote JDBC Mysql dans la liste des bibliothèques du projet, dans les propriétés de votre projet.

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’entre eux est peut-être que le fichier que vous ajoutez à votre dossier lib peut être ancien.

Essayez de trouver la dernière version de mysql-connector-jar et ajoutez-la à votre classpath. Cela peut résoudre votre problème. Le mien était résolu comme ça.

La plupart du temps, cela se produit parce que deux fichiers mysql-connector-java-3.0.14-production-bin.jar. Un dans le dossier lib de tomcat et un 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, cela fonctionne pour moi.

D’après ce que j’ai observé, il peut y avoir deux raisons à cette exception: (1) Le nom de votre pilote n’est pas orthographié correctement. (2) Le pilote n’a pas été associé correctement au projet Java Etapes à suivre dans Eclipse: (1) Créez un nouveau projet Java. (2) Copier le fichier Jar du connecteur (3) Cliquez avec le bouton droit sur le projet Java et collez-le ici. (4) Cliquez avec le bouton droit sur le projet Java -> Propriétés -> Java Build Path -> libraries-> Add Jar -> choisissez votre projet (sélectionnez le fichier jar dans la liste déroulante) et cliquez sur OK.

ajoutez l’artefact de maven.

   mysql mysql-connector-java 5.1.6  

La solution est simple.

Assurez-vous que le connecteur de la firebase database est accessible par votre chemin de classe lors de l’ exécution (et non de la compilation) du programme, par exemple:

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

De plus, si vous utilisez une ancienne version de Java (avant JDBC 4.0), avant de faire DriverManager.getConnection cette ligne est requirejse:

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

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

En utilisant

Eclipse Juno (téléchargé, non installé via le centre de logiciels), Tomcat 7 (téléchargé dans un répertoire utilisateur personnalisé) également ajouté en tant que serveur dans Eclipse, projet Web dynamic avec un servlet 3.0, serveur MySQL sur localhost configuré et testé avec utilisateur et mot de passe (assurez-vous de tester) pilote de connecteur MySQL 5.1.24 jar,

Je ‘HAD’, et je répète ‘HAD’, à nous, l’instruction Class.Load (“com.mysql.jdbc.Driver”) avec l’ajout du connecteur driver.jar dans le dossier lib du projet web pour qu’il fonctionne dans cette situation.

IMPORTANT !!: après avoir copié le fichier driver.jar dans lib, assurez-vous de rafraîchir votre projet dans Eclipse avant de lancer le servlet via Tomcat.

J’ai essayé d’append le fichier jar de pilote de connecteur via le chemin de construction avec et sans ClassLoad mais cela n’a pas fonctionné!

J’espère que cela aidera quiconque commence à développer 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 Class.Load est requirejs ici (dans cette situation), cela serait bénéfique.

Prendre plaisir

Etant donné que personne n’a donné cette réponse, je voudrais également append que vous pouvez simplement append le fichier de 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 cela devrait fonctionner.

  1. Mettez mysql-connector-java-5.0.8-bin.jar dans $ CATALINA_HOME / lib

  2. Vérifier la faute de frappe dans l’URL de connexion, exemple
    “jdbc: mysql: // localhost: 3306 / report” (‘report’ ici est le nom de la firebase database)

  3. Assurez-vous d’utiliser le nom de la machine (exemple: localhost au lieu de l’adresse ip (127.0.0.1))

Ajoutez la classe de pilote au bootstrapclasspath. Le problème réside dans java.sql.DriverManager qui ne voit pas les pilotes chargés par ClassLoaders autres que bootstrap ClassLoader.

Depuis un autre thread stackoverflow:

“Deuxièmement, assurez-vous que vous avez le pilote JDBC MySQL, également appelé Connector / J dans le chemin de classe de JMeter. Si vous ne le faites pas, téléchargez-le, décompressez et déposez mysql-connector-java-x.xx.xx-bin.jar dans JMeter’s / lib Le redémarrage de JMeter sera nécessaire pour récupérer la bibliothèque ”

Assurez-vous que le fichier .jar est ajouté directement au dossier lib.

Vous pouvez coller le pot dans le chemin de l’exécution de jboss comme ceci:

C: \ Utilisateur \ utilisateur \ espace de travail \ jboss-as-web-7.0.0.Final \ standalone \ deployments \ MYapplicationEAR.ear \ test.war \ WEB-INF \ lib ca marche 100%