Ich versuche, einer vorhandenen Tomcat 5.5-Anwendung eine datenbankfähige JSP hinzuzufügen (GeoServer 2.0.0, falls dies hilfreich ist).
Die App selbst spricht gut mit Postgres, also weiß ich, dass die Datenbank aktiv ist, der Benutzer darauf zugreifen kann, all das gute Zeug. Ich versuche, eine Datenbankabfrage in einer JSP durchzuführen, die ich hinzugefügt habe. Ich habe das Konfigurationsbeispiel im Tomcat-Datenquellenbeispiel ziemlich sofort verwendet. Die erforderlichen Taglibs befinden sich an der richtigen Stelle. Wenn ich nur die Taglib-Refs habe, treten keine Fehler auf, sodass diese JARs gefunden werden. Der postgres jdbc-Treiber postgresql-8.4.701.jdbc3.jar befindet sich in $ CATALINA_HOME / common / lib.
Hier ist die Spitze der 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>
Der relevante Abschnitt aus $ CATALINA_HOME / conf / server.xml, in dem <Host>
sich wiederum befindet <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>
Diese Zeilen sind die letzten im Tag in 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>
Zum Schluss die Ausnahme:
exception
org.apache.jasper.JasperException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver"
[...wads of ensuing goo elided]
quelle
Antworten:
Diese Ausnahme kann grundsätzlich zwei Ursachen haben:
1. Der JDBC-Treiber ist nicht geladen
Sie müssen sicherstellen, dass der JDBC-Treiber im eigenen
/lib
Ordner des Servers abgelegt ist .Wenn Sie tatsächlich keine vom Server verwaltete Verbindungspool-Datenquelle verwenden, sondern manuell
DriverManager#getConnection()
in WAR herumspielen, müssen Sie den JDBC-Treiber in WARs platzieren/WEB-INF/lib
und ausführen... in Ihrem Code vor dem ersten
DriverManager#getConnection()
Aufruf, wobei Sie sicherstellen, dass Sie nichts verschlucken / ignorieren,ClassNotFoundException
was von ihm geworfen werden kann, und den Code-Fluss fortsetzen, als ob nichts Außergewöhnliches passiert wäre. Siehe auch Wo muss ich den JDBC-Treiber für den Tomcat-Verbindungspool platzieren?2. Oder die JDBC-URL hat eine falsche Syntax
Sie müssen sicherstellen, dass die JDBC-URL der JDBC-Treiberdokumentation entspricht, und berücksichtigen, dass normalerweise zwischen Groß- und Kleinschreibung unterschieden wird. Wenn die JDBC - URL nicht zurück
true
fürDriver#acceptsURL()
für eine des geladenen Treiber, dann werden Sie auch genau diese Ausnahme erhalten.Im Falle von PostgreSQL ist dies hier dokumentiert .
Im Falle von MySQL ist dies hier dokumentiert .
Im Falle von Oracle ist dies hier dokumentiert .
Siehe auch:
quelle
Diese URL sieht falsch aus. Benötigen Sie Folgendes?
quelle
Ich habe vergessen, den PostgreSQL JDBC-Treiber in mein Projekt ( Mvnrepository) aufzunehmen ) aufzunehmen.
Gradle :
Maven :
Sie können die JAR auch herunterladen und manuell in Ihr Projekt importieren.
quelle
Ich stand vor dem ähnlichen Problem. Mein Projekt im Kontext ist Dynamic Web Project (Java 8 + Tomcat 8) und der Fehler ist für die PostgreSQL-Treiberausnahme: Kein geeigneter Treiber gefunden
Es wurde durch Hinzufügen
Class.forName("org.postgresql.Driver")
vor dem Aufrufen dergetConnection()
Methode behobenHier ist mein Beispielcode:
quelle
Ich fand den folgenden Tipp hilfreich, um dieses Problem in Tomcat zu beheben -
Stellen Sie sicher, dass Sie den Treiber zuerst laden, indem Sie Class.forName ("org.postgresql.Driver") ausführen. in Ihrem Code.
Dies ist aus dem Beitrag - https://www.postgresql.org/message-id/[email protected]
Der JDBC-Code funktionierte gut als eigenständiges Programm, gab jedoch in TOMCAT den Fehler "Kein geeigneter Treiber gefunden" aus.
quelle
Es kann erwähnenswert sein, dass dies auch auftreten kann, wenn Windows Downloads blockiert, die es als unsicher erachtet. Dies kann behoben werden, indem Sie mit der rechten Maustaste auf die JAR-Datei (z. B. ojdbc7.jar) klicken und das Kontrollkästchen "Entsperren" unten aktivieren.
Dialogfeld "Eigenschaften der Windows-JAR-Datei" :
quelle
Ein sehr dummer Fehler, der möglicherweise auftreten kann, ist das Hinzufügen von Speicherplatz zu Beginn der JDBC-URL-Verbindung.
Was ich meine ist:-
Angenommen, Sie haben bymistake die jdbc URL wie gegeben
(Beachten Sie, dass das Starren der URL ein Leerzeichen enthält. Dies führt zu einem Fehler.)
Der richtige Weg sollte sein:
(Beachten Sie, dass das Starren kein Leerzeichen enthält. Sie können am Ende der URL Leerzeichen eingeben, dies ist jedoch sicher.)
quelle
Ich habe jruby verwendet, in meinem Fall habe ich unter config / initializers erstellt
postgres_driver.rb
oder wo auch immer Ihr Fahrer ist, und das war's!
quelle
Stellen Sie neben dem Hinzufügen des MySQL JDBC-Connectors sicher, dass die Datei context.xml (falls nicht im Ordner Tomcat webapps entpackt) mit Ihren DB-Verbindungsdefinitionen im Verzeichnis Tomcats conf enthalten ist.
quelle
Ich hatte genau dieses Problem bei der Entwicklung einer Spring Boot-Anwendung in STS, aber letztendlich bei der Bereitstellung des gepackten Krieges für WebSphere (v.9). Aufgrund früherer Antworten war meine Situation einzigartig. ojdbc8.jar befand sich in meinem Ordner WEB-INF / lib, wobei das Laden der übergeordneten letzten Klasse festgelegt war, es wird jedoch immer angegeben, dass der geeignete Treiber nicht gefunden werden konnte.
Mein letztes Problem war, dass ich die falsche DataSource-Klasse verwendete, weil ich nur Online-Tutorials / Beispielen folgte. Den Hinweis dank David Dais Kommentar zu seiner eigenen Frage hier gefunden: Spring JDBC JDBC-Treiberklasse konnte nicht geladen werden [oracle.jdbc.driver.OracleDriver]
Auch später gefunden Spring Guru Beispiel mit Oracle-spezifischen Treiber: https://springframework.guru/configuring-spring-boot-for-oracle/
Beispiel, das anhand
org.springframework.jdbc.datasource.DriverManagerDataSource
generischer Beispiele Fehler auslöst.Und das korrigierte Beispiel mit
oracle.jdbc.pool.OracleDataSource
:quelle
Ich bin auf dieses Problem gestoßen, indem ich eine XML-Datei
src/main/resources
falsch in die Datei eingefügt, sie gelöscht und dann wieder normalisiert habe.quelle
Ich hatte das gleiche Problem mit der MySQL-Datenquelle bei der Verwendung von Spring-Daten, die außerhalb funktionieren würden, gab mir jedoch diesen Fehler bei der Bereitstellung auf Tomcat.
Der Fehler wurde behoben, als ich den Treiber jar mysql-connector-java-8.0.16.jar zum Ordner jres lib / ext hinzufügte
Ich wollte dies jedoch nicht in der Produktion tun, weil ich befürchtete, andere Anwendungen zu stören. Die explizite Definition der Treiberklasse hat dieses Problem für mich gelöst
quelle
Führen Sie
java
mitCLASSPATH
Umgebungsvariable zeigt auf Fahrer JAR - Datei, zBWo
drivers/mssql-jdbc-6.2.1.jre8.jar
ist der Pfad zur Treiberdatei (z. B. JDBC für SQL Server ) ?Das
ConnectURL
ist die Beispiel-App von diesem Treiber (samples/connections/ConnectURL.java
), kompiliert überjavac ConnectURL.java
.quelle
In meinem Fall habe ich mit Maven an einem Java-Projekt gearbeitet und bin auf diesen Fehler gestoßen. Stellen Sie in Ihrer pom.xml-Datei sicher, dass Sie diese Abhängigkeiten haben
und wo Sie eine Verbindung herstellen, haben Sie so etwas
quelle