Saya mencoba menambahkan JSP yang mendukung database ke aplikasi Tomcat 5.5 yang ada (GeoServer 2.0.0, jika itu membantu).
Aplikasi itu sendiri berbicara dengan Postgres dengan baik, jadi saya tahu bahwa database sudah habis, pengguna dapat mengaksesnya, semua hal bagus itu. Apa yang saya coba lakukan adalah kueri database di JSP yang telah saya tambahkan. Saya telah menggunakan contoh konfigurasi dalam contoh sumber data Tomcat di luar kotak. Taglib yang diperlukan ada di tempat yang benar - tidak ada kesalahan yang terjadi jika saya hanya memiliki taglib ref, jadi saya menemukan JAR tersebut. Driver jdbc postgres, postgresql-8.4.701.jdbc3.jar ada di $ CATALINA_HOME / common / lib.
Inilah bagian atas 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>
Bagian yang relevan dari $ CATALINA_HOME / conf / server.xml, di <Host>
dalamnya ada di dalam <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>
Baris ini adalah yang terakhir pada tag di 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>
Terakhir, pengecualian:
exception
org.apache.jasper.JasperException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver"
[...wads of ensuing goo elided]
sumber
Jawaban:
Pengecualian ini pada dasarnya dapat memiliki dua penyebab:
1. Driver JDBC tidak dimuat
Anda perlu memastikan bahwa driver JDBC ditempatkan di
/lib
folder server sendiri .Atau, ketika Anda sebenarnya tidak menggunakan sumber data kumpulan koneksi yang dikelola server, tetapi secara manual mengotak-atik
DriverManager#getConnection()
WAR, maka Anda perlu menempatkan driver JDBC di WAR/WEB-INF/lib
dan melakukan .... dalam kode Anda sebelum
DriverManager#getConnection()
panggilan pertama di mana Anda memastikan bahwa Anda tidak menelan / mengabaikan apa punClassNotFoundException
yang dapat dilemparkan olehnya dan melanjutkan aliran kode seolah-olah tidak ada hal luar biasa yang terjadi. Lihat juga Di mana saya harus menempatkan driver JDBC untuk kumpulan koneksi Tomcat?2. Atau, URL JDBC memiliki sintaks yang salah
Anda perlu memastikan bahwa URL JDBC sesuai dengan dokumentasi driver JDBC dan perlu diingat bahwa biasanya peka huruf besar kecil. Ketika URL JDBC tidak kembali
true
untukDriver#acceptsURL()
driver mana pun yang dimuat, maka Anda juga akan mendapatkan pengecualian ini.Dalam kasus PostgreSQL itu didokumentasikan di sini .
Dalam kasus MySQL, hal itu didokumentasikan di sini .
Dalam kasus Oracle, hal itu didokumentasikan di sini .
Lihat juga:
sumber
URL tersebut terlihat salah, apakah Anda memerlukan yang berikut ini?
sumber
Saya lupa menambahkan Driver JDBC PostgreSQL ke dalam proyek saya ( Mvnrepository ).
Gradle :
Maven :
Anda juga dapat men-download dengan JAR dan impor ke proyek Anda secara manual.
sumber
Saya menghadapi masalah serupa. Proyek saya dalam konteks adalah Proyek Web Dinamis (Java 8 + Tomcat 8) dan kesalahan untuk pengecualian Driver PostgreSQL: Tidak ditemukan driver yang sesuai
Itu diselesaikan dengan menambahkan
Class.forName("org.postgresql.Driver")
sebelum memanggilgetConnection()
metodeIni Kode Sampel saya:
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()); }
sumber
Saya menemukan tip followig bermanfaat, untuk menghilangkan masalah ini di Tomcat -
pastikan untuk memuat driver terlebih dahulu dengan melakukan Class.forName ("org.postgresql.Driver"); dalam kode Anda.
Ini dari pos - https://www.postgresql.org/message-id/[email protected]
Kode jdbc bekerja dengan baik sebagai program mandiri tetapi, di TOMCAT itu memberikan kesalahan -'Tidak ada driver yang cocok ditemukan '
sumber
Perlu dicatat bahwa ini juga dapat terjadi ketika Windows memblokir unduhan yang dianggap tidak aman. Ini dapat diatasi dengan mengklik kanan file jar (seperti ojdbc7.jar), dan mencentang kotak 'Buka blokir' di bagian bawah.
Dialog Properti File JAR Windows :
sumber
Selain menambahkan konektor MySQL JDBC, pastikan context.xml (jika tidak dibuka di folder webapps Tomcat) dengan definisi koneksi DB Anda termasuk dalam direktori conf Tomcats.
sumber
Kesalahan yang sangat konyol yang mungkin terjadi adalah penambahan spasi pada awal koneksi URL JDBC.
Yang saya maksud:-
misalkan Anda memiliki kesalahan karena diberikan url jdbc seperti
(Perhatikan ada spasi di staring url, ini akan membuat error)
cara yang benar adalah:
(Perhatikan tidak ada spasi di tatapan, Anda boleh memberi spasi di akhir url tetapi aman untuk tidak melakukannya)
sumber
Saya menggunakan jruby, dalam kasus saya, saya buat di bawah config / initializers
postgres_driver.rb
atau di mana pun pengemudi Anda, dan hanya itu!
sumber
Saya mengalami masalah yang sama persis saat mengembangkan aplikasi Spring Boot di STS, tetapi pada akhirnya menerapkan paket perang ke WebSphere (v.9). Berdasarkan jawaban sebelumnya, situasi saya unik. ojdbc8.jar ada di folder WEB-INF / lib saya dengan set pemuatan kelas Parent Last, tetapi selalu dikatakan gagal menemukan driver yang sesuai.
Masalah utama saya adalah saya menggunakan kelas DataSource yang salah karena saya hanya mengikuti tutorial / contoh online. Temukan petunjuknya berkat komentar David Dai atas pertanyaannya sendiri di sini: Spring JDBC Tidak dapat memuat kelas driver JDBC [oracle.jdbc.driver.OracleDriver]
Juga kemudian ditemukan contoh guru musim semi dengan driver khusus Oracle: https://springframework.guru/configuring-spring-boot-for-oracle/
Contoh yang melempar kesalahan menggunakan
org.springframework.jdbc.datasource.DriverManagerDataSource
berdasarkan contoh umum.Dan contoh yang dikoreksi menggunakan
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; } }
sumber
Saya mengalami masalah yang sama dengan sumber data mysql menggunakan data musim semi yang akan berfungsi di luar tetapi memberi saya kesalahan ini saat digunakan di tomcat.
Kesalahan hilang ketika saya menambahkan jar driver mysql-connector-java-8.0.16.jar ke folder jres lib / ext
Namun saya tidak ingin melakukan ini dalam produksi karena takut mengganggu aplikasi lain. Definisi kelas pengemudi yang jelas memecahkan masalah ini untuk saya
sumber
Jalankan
java
denganCLASSPATH
variabel lingkungan yang menunjuk ke file JAR driver, misDi mana
drivers/mssql-jdbc-6.2.1.jre8.jar
jalur ke file driver (misalnya JDBC untuk SQL Server ).Ini
ConnectURL
adalah aplikasi sampel dari driver itu (samples/connections/ConnectURL.java
), yang dikompilasi melaluijavac ConnectURL.java
.sumber
Dalam kasus saya, saya sedang mengerjakan proyek Java dengan Maven dan mengalami kesalahan ini. Di file pom.xml Anda, pastikan Anda memiliki dependensi ini
dan di mana Anda membuat koneksi memiliki sesuatu seperti ini
sumber
Class.forName
.DriverManager
harus bisa menemukannya.Anda akan mendapatkan kesalahan yang sama jika tidak ada definisi Sumber daya yang disediakan di suatu tempat untuk aplikasi Anda - kemungkinan besar baik dalam konteks pusat.xml, atau file konteks individu di conf / Catalina / localhost. Dan jika menggunakan file konteks individual, berhati - hatilah karena Tomcat menghapusnya secara bebas kapan pun Anda menghapus / membatalkan penerapan file .war yang sesuai.
sumber
Tidak peduli berapa umur utas ini, orang akan terus menghadapi masalah ini.
Kasus Saya: Saya memiliki pengaturan OpenJDK dan maven terbaru (pada saat posting). Saya telah mencoba semua metode yang diberikan di atas, dengan / keluar maven dan bahkan solusi pada kiriman saudara di StackOverflow. Saya tidak menggunakan IDE atau apa pun, menjalankan CLI kosong untuk mendemonstrasikan hanya logika inti.
Inilah yang akhirnya berhasil.
Class.forName(....)
. File yang kita inginkan adalahcom/mysql/jdbc/Driver.class
java --module-path com/mysql/jdbc -cp ./ App
Ini akan memuat paket (diekstrak) secara manual, dan program java Anda akan menemukan kelas Driver yang diperlukan.
mysql
driver, driver lain mungkin memerlukan sedikit perubahan..deb
gambar, Anda bisa mendapatkan botolnya dari/usr/share/java/your-vendor-file-here.jar
sumber
Saya mengalami masalah ini dengan memasukkan file XML ke dalam file yang
src/main/resources
salah, saya menghapusnya dan kemudian semuanya kembali normal.sumber