Я пытаюсь добавить JSP с поддержкой базы данных в существующее приложение Tomcat 5.5 (GeoServer 2.0.0, если это помогает).
Само приложение прекрасно взаимодействует с Postgres, поэтому я знаю, что база данных работает, пользователь может получить к ней доступ и все такое хорошее. Я пытаюсь выполнить запрос к базе данных в добавленном мной JSP. Я использовал пример конфигурации в примере с источником данных Tomcat практически сразу после установки. Необходимые библиотеки тегов находятся в нужном месте - ошибок не возникает, если у меня есть только ссылки на библиотеки тегов, поэтому он находит эти JAR. Драйвер postgres jdbc, postgresql-8.4.701.jdbc3.jar находится в $ CATALINA_HOME / common / lib.
Вот начало 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>
Соответствующий раздел из $ CATALINA_HOME / conf / server.xml, внутри <Host>
которого, в свою очередь, находится внутри <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>
Эти строки являются последними в теге в 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>
Наконец, исключение:
exception
org.apache.jasper.JasperException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver"
[...wads of ensuing goo elided]
источник
Ответы:
Это исключение может иметь две основные причины:
1. Драйвер JDBC не загружен
Вам необходимо убедиться, что драйвер JDBC находится в собственной
/lib
папке сервера .Или, если вы на самом деле не используете управляемый сервером источник данных пула соединений, а вручную возитесь с
DriverManager#getConnection()
WAR, вам нужно поместить драйвер JDBC в WAR/WEB-INF/lib
и выполнить .... в вашем коде перед первым
DriverManager#getConnection()
вызовом, посредством чего вы убедитесь, что вы не проглатываете / игнорируете все,ClassNotFoundException
что может быть выброшено им, и продолжаете поток кода, как будто ничего особенного не произошло. См. Также Где мне нужно разместить драйвер JDBC для пула соединений Tomcat?2. Или URL-адрес JDBC имеет неправильный синтаксис.
Вы должны убедиться, что URL-адрес JDBC соответствует документации драйвера JDBC, и помните, что он обычно чувствителен к регистру. Когда URL JDBC не возвращается
true
дляDriver#acceptsURL()
любого из загруженных драйверов, то вы также получите именно это исключение.В случае PostgreSQL это описано здесь .
В случае MySQL это описано здесь .
В случае Oracle это описано здесь .
Смотрите также:
источник
Этот URL выглядит неправильно, вам нужно следующее?
источник
Я забыл добавить драйвер PostgreSQL JDBC в свой проект ( Mvnrepository ).
Gradle :
Maven :
Вы также можете загрузить с JAR и импортировать в ваш проект вручную.
источник
Я столкнулся с аналогичной проблемой. Мой проект в контексте - это динамический веб-проект (Java 8 + Tomcat 8), а ошибка связана с исключением драйвера PostgreSQL: подходящий драйвер не найден
Это было решено добавлением
Class.forName("org.postgresql.Driver")
перед вызовомgetConnection()
методаВот мой пример кода:
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()); }
источник
Я нашел следующий совет полезным, чтобы устранить эту проблему в Tomcat -
не забудьте сначала загрузить драйвер, выполнив Class.forName ("org.postgresql.Driver"); в вашем коде.
Это из сообщения - https://www.postgresql.org/message-id/e13c14ec050510103846db6b0e@mail.gmail.com
Код jdbc работал нормально как отдельная программа, но в TOMCAT он выдавал ошибку: «Подходящий драйвер не найден».
источник
Возможно, стоит отметить, что это также может произойти, когда Windows блокирует загрузки, которые она считает небезопасными. Эту проблему можно решить, щелкнув правой кнопкой мыши файл jar (например, ojdbc7.jar) и установив флажок «Разблокировать» внизу.
Диалог свойств файла Windows JAR :
источник
Помимо добавления соединителя MySQL JDBC, убедитесь, что context.xml (если он не распакован в папке Tomcat webapps) с определениями подключения к БД включен в каталог Tomcats conf.
источник
Очень глупая ошибка, результатом которой может стать добавление пробела в начале URL-адреса JDBC.
Я имею в виду:-
предположим, вы по ошибке дали URL-адрес jdbc, например
(Обратите внимание, что в начале URL-адреса есть пробел, это приведет к ошибке)
правильный путь должен быть:
(Обратите внимание, что во взгляде нет пробела, вы можете оставить пробел в конце URL-адреса, но это безопасно)
источник
Я использовал jruby, в моем случае я создал в config / initializers
postgres_driver.rb
или где бы ни был ваш водитель, и все!
источник
У меня возникла именно эта проблема при разработке приложения Spring Boot в STS, но в конечном итоге при развертывании пакетной войны в WebSphere (v.9). Судя по предыдущим ответам, моя ситуация была уникальной. ojdbc8.jar находился в моей папке WEB-INF / lib с набором загрузки класса Parent Last, но всегда говорилось, что не удалось найти подходящий драйвер.
Моя основная проблема заключалась в том, что я использовал неправильный класс DataSource, потому что я просто следил за онлайн-учебниками / примерами. Нашел подсказку благодаря комментарию Дэвида Дая по его собственному вопросу здесь: Spring JDBC Не удалось загрузить класс драйвера JDBC [oracle.jdbc.driver.OracleDriver]
Также позже был найден пример spring guru с конкретным драйвером Oracle: https://springframework.guru/configuring-spring-boot-for-oracle/
Пример, который вызывает ошибку, используя
org.springframework.jdbc.datasource.DriverManagerDataSource
на основе общих примеров.И исправленный пример с использованием
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; } }
источник
У меня была такая же проблема с источником данных mysql, использующим данные Spring, которые работали бы снаружи, но дали мне эту ошибку при развертывании на tomcat.
Ошибка исчезла, когда я добавил драйвер jar mysql-connector-java-8.0.16.jar в папку jres lib / ext.
Однако я не хотел делать это в производственной среде из-за боязни помешать работе других приложений. Явное определение класса драйвера решило эту проблему для меня
источник
Запустите
java
сCLASSPATH
переменной окружения, указывающей на файл JAR драйвера, напримерГде
drivers/mssql-jdbc-6.2.1.jre8.jar
путь к файлу драйвера (например, JDBC для SQL Server ).Это
ConnectURL
образец приложения из этого драйвера (samples/connections/ConnectURL.java
), скомпилированный с помощьюjavac ConnectURL.java
.источник
В моем случае я работал над Java-проектом с Maven и столкнулся с этой ошибкой. В вашем файле pom.xml убедитесь, что у вас есть эти зависимости
и где вы создаете соединение, есть что-то вроде этого
источник
Class.forName
.DriverManager
должен уметь его найти.Вы получите ту же ошибку, если где-то для вашего приложения не предусмотрено определение ресурса - скорее всего, в центральном context.xml или в отдельном файле контекста в conf / Catalina / localhost. А если вы используете отдельные файлы контекста, помните, что Tomcat свободно удаляет их каждый раз, когда вы удаляете / отменяете развертывание соответствующего файла .war.
источник
Независимо от того, сколько лет станет этой нити, люди будут продолжать сталкиваться с этой проблемой.
Мой случай: у меня есть последняя (на момент публикации) установка OpenJDK и maven. Я пробовал все методы, приведенные выше, с / вне maven и даже решения в родственных сообщениях на StackOverflow. Я не использую какую-либо IDE или что-либо еще, работаю из чистого CLI, чтобы продемонстрировать только базовую логику.
Вот что в итоге сработало.
Class.forName(....)
. Нам нужен файлcom/mysql/jdbc/Driver.class
java --module-path com/mysql/jdbc -cp ./ App
Это загрузит (извлеченный) пакет вручную, и ваша java-программа найдет требуемый класс драйвера.
mysql
драйвера, другие драйверы могут потребовать незначительных изменений..deb
изображение, вы можете получить банку из/usr/share/java/your-vendor-file-here.jar
источник
Я столкнулся с этой проблемой,
src/main/resources
неправильно поместив XML-файл , я удалил его, а затем все вернулся в нормальное состояние.источник