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?
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)
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
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.
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:
- cliquez sur" Ouvrir La Fenêtre de lancement " > l'onglet Classpath définit l'emplacement du connecteur mysql/jar. ou
- emplacement du serveur > sélectionner l'option qui dit " utiliser L'installation Tomcat (prendre le contrôle de L'installation Tomcat)"
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.
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.
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);
ajouter l'artefact de maven.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
utiliser:
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Registro exitoso");
} catch (Exception e) {
System.out.println(e.toString());
}
DriverManager.getConnection(..
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);
}
}
}
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
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.
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.
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.
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
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
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.
-
Mettre mysql-connector-java-5.0.8-bin.jar in $CATALINA_HOME / lib
-
vérification de l'url de connexion, exemple
"jdbc:mysql://localhost:3306/report ("rapport" est ici le nom db) - assurez-vous d'utiliser le nom de la machine (exemple : localhost au lieu de l'adresse ip (127.0.0.1))
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.
à 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.
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%