J'essaie d'ajouter un JSP compatible avec la base de données à une application Tomcat 5.5 existante (GeoServer 2.0.0, si cela aide).
L'application elle-même parle très bien à Postgres, donc je sais que la base de données est active, que l'utilisateur peut y accéder, toutes ces bonnes choses. Ce que j'essaye de faire est une requête de base de données dans une JSP que j'ai ajoutée. J'ai utilisé l'exemple de configuration dans l' exemple de source de données Tomcat peu près . Les taglibs requis sont au bon endroit - aucune erreur ne se produit si je n'ai que les références taglib, donc il trouve ces JAR. Le pilote jdbc de 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 pertinente de $ CATALINA_HOME / conf / server.xml, à l'intérieur du <Host>
qui se trouve à 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 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]
la source
Réponses:
Cette exception peut avoir essentiellement deux causes:
1. Le pilote JDBC n'est pas chargé
Vous devez vous assurer que le pilote JDBC est placé dans le propre
/lib
dossier du serveur .Ou, lorsque vous n'utilisez en fait pas une source de données de pool de connexions gérée par le serveur, mais que vous tripotez manuellement
DriverManager#getConnection()
dans WAR, vous devez placer le pilote JDBC dans WAR/WEB-INF/lib
et effectuer... dans votre code avant le premier
DriverManager#getConnection()
appel par lequel vous vous assurez de ne pas avaler / ignorer toutClassNotFoundException
ce qui peut être jeté par lui 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 connexions 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 revient pas
true
pourDriver#acceptsURL()
aucun des pilotes chargés, vous obtiendrez également exactement cette exception.Dans le cas de PostgreSQL, il est documenté ici .
Dans le cas de MySQL, il est documenté ici .
Dans le cas d' Oracle, il est documenté ici .
Voir également:
la source
Cette URL semble incorrecte, avez-vous besoin des éléments suivants?
la source
J'ai oublié d'ajouter le pilote JDBC PostgreSQL dans mon projet ( Mvnrepository ).
Gradle :
Maven :
Vous pouvez également télécharger le JAR et l'importer manuellement dans votre projet.
la source
J'ai fait face au même problème. Mon projet en contexte est Dynamic Web Project (Java 8 + Tomcat 8) et l'erreur concerne l'exception du pilote PostgreSQL: aucun pilote approprié trouvé
Il a été résolu en ajoutant
Class.forName("org.postgresql.Driver")
avant d'appelergetConnection()
méthodeVoici mon exemple de code:
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()); }
la source
J'ai trouvé le conseil suivant utile, pour éliminer ce problème dans Tomcat -
assurez-vous de charger d'abord le pilote en effectuant un Class.forName ("org.postgresql.Driver"); dans votre code.
Ceci est du post - https://www.postgresql.org/message-id/[email protected]
Le code jdbc fonctionnait bien en tant que programme autonome mais, dans TOMCAT, il donnait l'erreur -'Aucun pilote approprié trouvé '
la source
Il peut être intéressant de noter que cela peut également se produire lorsque Windows bloque les téléchargements qu'il considère comme dangereux. Cela peut être résolu en cliquant avec le bouton droit sur le fichier jar (tel que ojdbc7.jar) et en cochant la case «Débloquer» en bas.
Boîte de dialogue Propriétés du fichier JAR Windows :
la source
Outre l'ajout du connecteur JDBC MySQL, assurez-vous que le fichier context.xml (s'il n'est pas décompressé dans le dossier Tomcat webapps) avec vos définitions de connexion à la base de données est inclus dans le répertoire conf de Tomcats.
la source
Une erreur très idiote qui pourrait être possible est l'ajout d'espace au début de la connexion URL JDBC.
Ce que je veux dire est:-
supposons que vous ayez par erreur donné l'URL jdbc comme
(Notez qu'il y a un espace dans le regard de l'url, cela fera l'erreur)
la bonne manière devrait être:
(Notez qu'il n'y a pas d'espace dans le regard, vous pouvez laisser de l'espace à la fin de l'url mais il est prudent de ne pas le faire)
la source
J'utilisais jruby, dans mon cas j'ai créé sous config / initializers
postgres_driver.rb
ou où que se trouve votre chauffeur, et c'est tout!
la source
J'ai eu ce problème exact lors du développement d'une application Spring Boot dans STS, mais en fin de compte, lors du déploiement de la guerre packagée 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 le chargement de la classe Parent Last, mais il dit toujours qu'il n'a pas réussi à trouver le pilote approprié.
Mon problème ultime était que j'utilisais la classe DataSource incorrecte parce que je ne faisais que suivre des tutoriels / exemples en ligne. J'ai trouvé l'indice grâce au commentaire de David Dai sur sa propre question ici: Spring JDBC Impossible de charger la classe de pilote JDBC [oracle.jdbc.driver.OracleDriver]
Nous avons également trouvé plus tard un exemple de gourou de printemps avec un pilote spécifique à Oracle: https://springframework.guru/configuring-spring-boot-for-oracle/
Exemple qui génère une erreur en utilisant
org.springframework.jdbc.datasource.DriverManagerDataSource
des exemples génériques.Et l'exapmle 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; } }
la source
J'avais le même problème avec la source de données mysql en utilisant des données de printemps qui fonctionneraient à l'extérieur, mais m'a donné cette erreur lors du déploiement sur tomcat.
L'erreur a disparu lorsque j'ai ajouté le pilote jar mysql-connector-java-8.0.16.jar au dossier jres lib / ext
Cependant, je ne voulais pas faire cela en production par peur d'interférer avec d'autres applications. La définition explicite de la classe de pilote a résolu ce problème pour moi
la source
Exécuter
java
avecCLASSPATH
une variable d'environnement pointant vers le fichier JAR du pilote, par exempleOù
drivers/mssql-jdbc-6.2.1.jre8.jar
est le chemin d'accès au fichier du pilote (par exemple, JDBC pour pour SQL Server ).Le
ConnectURL
est l'exemple d'application de ce pilote (samples/connections/ConnectURL.java
), compilé viajavac ConnectURL.java
.la source
Dans mon cas, je travaillais sur un projet Java avec Maven et j'ai rencontré cette erreur. Dans votre fichier pom.xml, assurez-vous que vous avez ces dépendances
et où vous créez une connexion ont quelque chose comme ça
la source
Class.forName
.DriverManager
devrait pouvoir le trouver.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 dans le fichier context.xml central ou dans un fichier de contexte individuel dans conf / Catalina / localhost. Et si vous utilisez des fichiers de contexte individuels, sachez que Tomcat les supprime librement à chaque fois que vous supprimez / annulez le déploiement du fichier .war correspondant.
la source
Peu importe l'âge de ce fil, les gens continueraient à être confrontés à ce problème.
Mon cas: J'ai la dernière configuration (au moment de la publication) d'OpenJDK et de maven. J'avais essayé toutes les méthodes données ci-dessus, avec / out maven et même des solutions sur des articles sœurs sur StackOverflow. Je n'utilise aucun IDE ou quoi que ce soit d'autre, fonctionnant à partir de la CLI nue pour démontrer uniquement la logique de base.
Voici ce qui a finalement fonctionné.
Class.forName(....)
. Le fichier que nous voulons est lecom/mysql/jdbc/Driver.class
java --module-path com/mysql/jdbc -cp ./ App
Cela chargerait le package (extrait) manuellement et votre programme java trouverait la classe Driver requise.
mysql
pilote, d'autres pilotes peuvent nécessiter des modifications mineures..deb
image, vous pouvez obtenir le pot à partir de/usr/share/java/your-vendor-file-here.jar
la source
J'ai rencontré ce problème en insérant un fichier XML à
src/main/resources
tort, je l'ai supprimé, puis je suis revenu à la normale.la source