124 votes

La fameuse exception java.sql.SQLException : Aucun pilote approprié n'a été trouvé

J'essaie d'ajouter un JSP avec base de données à une application Tomcat 5.5 existante (GeoServer 2.0.0, si cela peut aider).

L'application elle-même communique parfaitement avec Postgres, je sais donc que la base de données est en place, que l'utilisateur peut y accéder, et tout le reste. Ce que j'essaie de faire, c'est une requête de base de données dans un JSP que j'ai ajouté. J'ai utilisé l'exemple de configuration dans la page Exemple de source de données Tomcat pratiquement prêt à l'emploi. Les taglibs nécessaires sont au bon endroit - aucune erreur ne se produit si je n'ai que les refs des taglibs, donc il trouve ces JARs. Le pilote jdbc postgres, postgresql-8.4.701.jdbc3.jar se trouve dans $CATALINA_HOME/common/lib.

Voici le haut de la JSP :

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<sql:query var="rs" dataSource="jdbc/mmas">
  select current_validstart as ValidTime from runoff_forecast_valid_time
</sql:query>

La section correspondante de $CATALINA_HOME/conf/server.xml, à l'intérieur de la section <Host> qui se trouve à son tour à l'intérieur de <Engine> :

<Context path="/gs2" allowLinking="true">
  <Resource name="jdbc/mmas" type="javax.sql.Datasource"
      auth="Container" driverClassName="org.postgresql.Driver"
      maxActive="100" maxIdle="30" maxWait="10000"
      username="mmas" password="very_secure_yess_precious!"
      url="jdbc:postgresql//localhost:5432/mmas" />
</Context>

Ces lignes sont les dernières de la balise dans webapps/gs2/WEB-INF/web.xml :

<resource-ref>
  <description>
     The database resource for the MMAS PostGIS database
  </description>
  <res-ref-name>
     jdbc/mmas
  </res-ref-name>
  <res-type>
     javax.sql.DataSource
  </res-type>
  <res-auth>
     Container
  </res-auth>
</resource-ref>

Enfin, l'exception :

   exception
    org.apache.jasper.JasperException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver"
    [...wads of ensuing goo elided]

2voto

Yash Kumar Verma Points 4775

Quelle que soit l'ancienneté de ce fil, les gens continueront à être confrontés à ce problème.

Mon cas : J'ai la dernière version (au moment de la publication) d'OpenJDK et de maven. J'ai essayé toutes les méthodes données ci-dessus, avec/sans maven et même des solutions sur des posts similaires sur StackOverflow. Je n'utilise pas d'IDE ou quoi que ce soit d'autre, je fonctionne à partir d'une CLI nue pour démontrer uniquement la logique de base.

Voici ce qui a finalement fonctionné.

  • Téléchargez le pilote à partir du site officiel. (pour moi, il s'agissait de MySQL https://www.mysql.com/products/connector/ ). Laissez libre cours à votre imagination.
  • Décompressez le fichier jar donné dans le même répertoire que votre projet Java. Vous obtiendrez une structure de répertoire comme celle-ci. Si vous regardez attentivement, cela correspond exactement à ce que nous essayons de faire en utilisant Class.forName(....) . Le fichier que nous voulons est le com/mysql/jdbc/Driver.class

https://i.imgur.com/VgpwatQ.png

  • Compilez le programme Java contenant le code.

    javac App.java

  • Chargez maintenant le directeur en tant que module en exécutant

    java --module-path com/mysql/jdbc -cp ./ App

Le paquet (extrait) serait ainsi chargé manuellement et votre programme Java trouverait la classe Driver requise.


  • Notez que cela a été fait pour le mysql d'autres pilotes peuvent nécessiter des modifications mineures.
  • Si votre fournisseur propose un .deb vous pouvez obtenir le bocal à partir de /usr/share/java/your-vendor-file-here.jar

1voto

user7994072 Points 11

Il convient de noter que ce phénomène peut également se produire lorsque Windows bloque les téléchargements qu'il considère comme dangereux. Pour y remédier, il suffit de cliquer avec le bouton droit de la souris sur le fichier jar (tel que ojdbc7.jar) et de cocher la case "Débloquer" en bas de l'écran.

Boîte de dialogue des propriétés du fichier JAR sous Windows :
Windows JAR File Properties Dialog

1voto

feistyfawn Points 101

En plus d'ajouter le connecteur MySQL JDBC, assurez-vous que le fichier context.xml (s'il n'a pas été décompressé dans le dossier webapps de Tomcat) avec vos définitions de connexion à la base de données sont inclus dans le répertoire conf de Tomcat.

1voto

ankkol2011 Points 11

L'ajout d'un espace au début de la connexion à l'URL JDBC est une erreur très stupide qui pourrait en résulter.

Ce que je veux dire, c'est que

Supposons que vous ayez donné par erreur l'url jdbc comme suit

String jdbcUrl=" jdbc:mysql://localhost:3306/web_customer_tracker?useSSL=false&serverTimeZone=UTC";

(Remarquez qu'il y a un espace dans le début de l'url, ce qui provoque l'erreur)

La bonne façon de procéder devrait être :

String jdbcUrl="jdbc:mysql://localhost:3306/web_customer_tracker?useSSL=false&serverTimeZone=UTC";

(Notez qu'il n'y a pas d'espace dans l'url, vous pouvez donner de l'espace à la fin de l'url mais il est prudent de ne pas le faire).

1voto

kenorb Points 2464

Ejecutar java avec CLASSPATH variable environnementale pointant vers le fichier JAR du pilote, par exemple

CLASSPATH='.:drivers/mssql-jdbc-6.2.1.jre8.jar' java ConnectURL

drivers/mssql-jdbc-6.2.1.jre8.jar est le chemin d'accès au fichier du pilote (par ex. JDBC pour SQL Server ).

En ConnectURL est l'exemple d'application de ce pilote ( samples/connections/ConnectURL.java ), compilé via javac ConnectURL.java .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X