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]

0voto

Ale Guro Points 9

J'utilisais jruby, dans mon cas j'ai créé sous config/initializers

postgres_driver.rb

$CLASSPATH << '~/.rbenv/versions/jruby-1.7.17/lib/ruby/gems/shared/gems/jdbc-postgres-9.4.1200/lib/postgresql-9.4-1200.jdbc4.jar'

ou de l'endroit où se trouve votre chauffeur, et c'est tout !

0voto

rgdayo Points 41

J'ai rencontré ce problème lors du développement d'une application Spring Boot dans STS, mais en déployant finalement le packaged war sur WebSphere (v.9). D'après les réponses précédentes, ma situation était unique. ojdbc8.jar était dans mon dossier WEB-INF/lib avec Parent Last class loading set, mais il dit toujours qu'il n'a pas réussi à trouver le pilote approprié.

Mon dernier problème était que j'utilisais la mauvaise classe DataSource parce que je suivais simplement les tutoriels/exemples en ligne. J'ai trouvé l'astuce grâce au commentaire de David Dai sur sa propre question ici : Spring JDBC Impossible de charger la classe du pilote JDBC [oracle.jdbc.driver.OracleDriver].

J'ai également trouvé plus tard l'exemple de Spring Guru avec un pilote spécifique à Oracle : https://springframework.guru/configuring-spring-boot-for-oracle/

Exemple d'erreur lors de l'utilisation de org.springframework.jdbc.datasource.DriverManagerDataSource sur la base d'exemples génériques.

@Config
@EnableTransactionManagement
public class appDataConfig {
 \* Other Bean Defs *\
    @Bean
    public DataSource dataSource() {
        // configure and return the necessary JDBC DataSource
        DriverManagerDataSource dataSource = new DriverManagerDataSource("jdbc:oracle:thin:@//HOST:PORT/SID", "user", "password");
        dataSource.setSchema("MY_SCHEMA");
        return dataSource;
    }
}

Et l'exemple corrigé utilisant un oracle.jdbc.pool.OracleDataSource :

@Config
@EnableTransactionManagement
public class appDataConfig {
/* Other Bean Defs */
@Bean
    public DataSource dataSource() {
        // configure and return the necessary JDBC DataSource
        OracleDataSource datasource = null;
        try {
            datasource = new OracleDataSource();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        datasource.setURL("jdbc:oracle:thin:@//HOST:PORT/SID");
        datasource.setUser("user");
        datasource.setPassword("password");

        return datasource;
    }
}

0voto

Jag Points 1

J'avais le même problème avec une source de données mysql utilisant spring data qui fonctionnait à l'extérieur mais qui me donnait cette erreur lorsqu'elle était déployée sur tomcat.

L'erreur a disparu lorsque j'ai ajouté le pilote mysql-connector-java-8.0.16.jar au dossier jres lib/ext.

Cependant, je n'ai pas voulu faire cela en production de peur d'interférer avec d'autres applications. La définition explicite de la classe du pilote a résolu ce problème pour moi.

    spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver

0voto

Justice Bringer Points 11

Dans mon cas, je travaillais sur un projet Java avec Maven et j'ai rencontré cette erreur. Dans votre fichier pom.xml, assurez-vous d'avoir les dépendances suivantes

<dependencies>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.11</version>
    </dependency>
  </dependencies>

et là où vous créez une connexion, vous avez quelque chose comme ceci

public Connection createConnection() {
        try {
            String url = "jdbc:mysql://localhost:3306/yourDatabaseName";
            String username = "root"; //your my sql username here
            String password = "1234"; //your mysql password here

            Class.forName("com.mysql.cj.jdbc.Driver");
            return DriverManager.getConnection(url, username, password);
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }

        return null;
    }

0voto

em_bo Points 508

Vous obtiendrez cette même erreur s'il n'y a pas de définition de ressource fournie quelque part pour votre application - très probablement soit dans le context.xml central, soit dans le fichier de contexte individuel dans conf/Catalina/localhost. Et si vous utilisez des fichiers de contexte individuels, se méfier que Tomcat les supprime librement à chaque fois que vous supprimez/déployez le fichier .war correspondant.

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