L'infâme java.SQL.SQLException: aucun pilote adapté n'a été trouvé

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

L'application elle-même parle à Postgres très bien, donc je sais que la base de données est en place, l'utilisateur peut accéder, toutes ces bonnes choses. Ce que j'essaie de faire est une requête de base de données dans un JSP que j'ai ajouté. J'ai utilisé l'exemple de configuration dans L'exemple de source de données Tomcat à peu près hors de la boîte. Les taglibs nécessaires sont dans le au bon endroit -- aucune erreur ne se produit si j'ai juste les références taglib, donc il trouve ces bocaux. Le pilote JDBC PostgreSQL-8.4.701.jdbc3.jar est en $ CATALINA_HOME/common / lib.

voici le sommet du 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 pertinente de $CATALINA_HOME/conf/server.xml, à l'intérieur du <Host> qui est à son tour dans <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 dans la balise 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]
55
demandé sur BalusC 2009-12-16 02:33:36

9 réponses

l'infâme java.SQL.SQLException: aucun pilote approprié trouvé

cette exception peut avoir essentiellement deux causes:

1. Le conducteur JDBC n'est pas chargé

vous devez vous assurer que le pilote JDBC est placé dans le propre dossier du serveur /lib .

ou, lorsque vous n'utilisez pas de source de données de pool de connexion gérée par un serveur, mais que vous trafiquez manuellement avec DriverManager#getConnection() en temps de guerre, alors vous devez placer le pilote JDBC dans /WEB-INF/lib en temps de guerre et effectuer ..

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

.. dans votre code avant le premier DriverManager#getConnection() appel par lequel vous vous assurez que vous faites pas avalez / ignorez tout ClassNotFoundException qui peut être jeté par elle 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. Or, L'URL JDBC est dans la mauvaise syntaxe

vous devez vous assurer que L'URL JDBC est conforme à la documentation du pilote JDBC et garder à l'esprit que c'est habituellement sensible à la casse. Lorsque L'URL JDBC ne renvoie pas true pour Driver#acceptsURL() pour l'une des les pilotes, alors vous aurez également obtenir exactement cette exception.

dans le cas de PostgreSQL il 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

dans le cas de MySQL il est documenté ici .

le format général d'une URL JDBC pour se connecter à un serveur MySQL est le suivant, avec les éléments entre crochets ( [ ] ) étant optionnel:

jdbc:mysql://[host1][:port1][,[host2][:port2]]...[/[database]] » [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]

dans le cas de Oracle il est documenté ici .

il y a 2 syntaxe D'URL, ancienne syntaxe qui ne fonctionnera qu'avec SID et la nouvelle avec le nom de service Oracle.

ancienne syntaxe jdbc:oracle:thin:@[HOST][:PORT]:SID

nouvelle syntaxe jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE


Voir aussi:

71
répondu BalusC 2017-05-23 12:10:06
url="jdbc:postgresql//localhost:5432/mmas"

cette URL semble erronée, avez-vous besoin de ce qui suit?

url="jdbc:postgresql://localhost:5432/mmas"
13
répondu araqnid 2009-12-15 23:56:44

j'ai trouvé le conseil suivant utile, pour éliminer ce problème dans Tomcat -

assurez-vous de charger le conducteur d'abord faire une classe.forName(" org.PostgreSQL.Driver"); dans votre code.

c'est du post - https://www.postgresql.org/message-id/e13c14ec050510103846db6b0e@mail.gmail.com

le code jdbc fonctionnait bien en tant que programme autonome mais, dans TOMCAT, il donnait l'erreur - ' Pas de pilote approprié found '

3
répondu A Venkatraman 2018-01-19 15:52:05

j'ai fait face à la même question. Mon projet dans le contexte est le projet web dynamique (Java 8 + Tomcat 8) et l'erreur est pour le pilote PostgreSQL exception: aucun pilote approprié trouvé

il a été résolu en ajoutant Class.forName("org.postgresql.Driver") avant d'appeler getConnection() méthode

Voici mon code D'échantillon:

try {
            Connection conn = null;
            Class.forName("org.postgresql.Driver");
            conn = DriverManager.getConnection("jdbc:postgresql://" + host + ":" + port + "/?preferQueryMode="
                    + sql_auth,sql_user , sql_password);
        } catch (Exception e) {
            System.out.println("Failed to create JDBC db connection " + e.toString() + e.getMessage());
        }
3
répondu Vinayak Singh 2018-04-30 10:19:51

j'ai oublié d'ajouter le pilote PostgreSQL JDBC dans le projet Mvrrepository .

Gradle :

// http://mvnrepository.com/artifact/postgresql/postgresql
compile group: 'postgresql', name: 'postgresql', version: '9.0-801.jdbc4'

Maven :

<dependency>
    <groupId>postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.0-801.jdbc4</version>
</dependency>

vous pouvez aussi télécharger le JAR et importer à votre projet manuellement.

3
répondu Manuel Schmitzberger 2018-07-17 14:25:50

Il pourrait être intéressant de noter que cela peut également se produire lorsque Windows bloque les téléchargements qu'il juge dangereux. Cela peut être fait en cliquant droit sur le fichier jar (comme ojdbc7.jar), et en cochant la case "débloquer" en bas.

Windows POT de Dialogue Propriétés du Fichier :

Windows JAR File Properties Dialog

1
répondu user7994072 2017-05-10 21:14:09

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 où que soit votre chauffeur, et c'est tout !

0
répondu Ale Guro 2017-02-14 19:59:11

ainsi que l'ajout du connecteur JDBC MySQL assurent le contexte.xml (s'il n'est pas déballé dans le dossier Tomcat webapps) avec vos définitions de connexion DB sont inclus dans le répertoire Tomcats conf.

0
répondu feistyfawn 2017-06-29 16:07:24

j'ai eu ce problème précis lors du développement d'une application de boot à ressort dans STS, mais finalement le déploiement de la guerre packaged à 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 le dernier chargement de classe de Parent réglé, mais toujours il dit qu'il n'a pas trouvé le pilote approprié.

mon problème ultime était que j'utilisais la mauvaise classe DataSource parce que je suivais juste avec des tutoriels/exemples en ligne. Trouvé l'indice grâce à David dai commentaire sur sa propre question ici: printemps JDBC ne pouvait pas charger la classe de pilote JDBC [oracle.jdbc.pilote.OracleDriver]

a également trouvé plus tard un exemple de gourou de printemps avec le pilote spécifique Oracle: https://springframework.guru/configuration-spring-boot-pour-oracle/

exemple qui génère une erreur en utilisant org.springframework.jdbc.datasource.DriverManagerDataSource basé sur des 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'extrait corrigé en 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;
    }
}
0
répondu Ryan D 2017-07-19 20:31:57