La tristement célèbre java.sql.SQLException :Aucun pilote approprié n'a été trouvé
Cette exception peut avoir essentiellement deux provoque :
#1. Le pilote JDBC n'est pas chargé
Vous devez vous assurer que le pilote JDBC est placé dans le propre /lib
du serveur dossier.
Ou, lorsque vous n'utilisez pas une source de données de pool de connexions gérée par le serveur, mais que vous manipulez manuellement DriverManager#getConnection()
dans WAR, alors vous devez placer le pilote JDBC dans /WEB-INF/lib
de WAR et effectuer ..
Class.forName("com.example.jdbc.Driver");
.. dans votre code avant le premier DriverManager#getConnection()
appel par lequel vous vous assurez que vous ne le faites pas avaler/ignorer toute ClassNotFoundException
qui peut être lancé par celui-ci et continuer le flux de code comme si rien d'exceptionnel ne s'était produit. Voir aussi Où dois-je placer le pilote JDBC pour le pool de connexion de Tomcat ?
#2. Ou, l'URL JDBC est dans une mauvaise syntaxe
Vous devez vous assurer que l'URL JDBC est conforme à la documentation du pilote JDBC et garder à l'esprit qu'elle est généralement sensible à la casse. Lorsque l'URL JDBC ne renvoie pas true
pour Driver#acceptsURL()
pour l'un des pilotes chargés, vous obtiendrez également exactement cette exception.
Dans le cas de PostgreSQL c'est documenté ici.
Avec JDBC, une base de données est représentée par une URL (Uniform Resource Locator). Avec PostgreSQL™, cela prend l'une des formes suivantes :
jdbc:postgresql:database
jdbc:postgresql://host/database
jdbc:postgresql://host:port/database
En cas de MySQL c'est documenté ici.
Le format général d'une URL JDBC pour se connecter à un serveur MySQL est le suivant, avec des éléments entre crochets (
[ ]
) étant facultatif :
jdbc:mysql://[host1][:port1][,[host2][:port2]]...[/[database]] » [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]
Dans le cas d'Oracle c'est documenté ici.
Il existe 2 syntaxes d'URL, l'ancienne syntaxe qui ne fonctionnera qu'avec le SID et la nouvelle avec le nom du service Oracle.
Ancienne syntaxe
jdbc:oracle:thin:@[HOST][:PORT]:SID
Nouvelle syntaxe
jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
###Voir aussi :
- Où dois-je placer le pilote JDBC pour le pool de connexion de Tomcat ?
- Comment installer le pilote JDBC dans un projet Web Eclipse sans faire face à java.lang.ClassNotFoundexception
- Comment dois-je me connecter à la base de données/source de données JDBC dans une application basée sur un servlet ?
- Quelle est la différence entre "Class.forName()" et "Class.forName().newInstance()" ?
- Connecter Java à une base de données MySQL