java.sql.SQLException khét tiếng:Không tìm thấy trình điều khiển phù hợp
Ngoại lệ này về cơ bản có thể có hai nguyên nhân:
# 1. Trình điều khiển JDBC không được tải
Bạn cần đảm bảo rằng trình điều khiển JDBC được đặt trong /lib
của chính máy chủ thư mục.
Hoặc, khi bạn thực sự không sử dụng nguồn dữ liệu nhóm kết nối do máy chủ quản lý, mà đang tìm kiếm thủ công với DriverManager#getConnection()
trong WAR, sau đó bạn cần đặt trình điều khiển JDBC trong /WEB-INF/lib
của WAR và thực hiện ..
Class.forName("com.example.jdbc.Driver");
.. trong mã của bạn trước đây DriverManager#getConnection()
đầu tiên gọi nhờ đó bạn đảm bảo rằng bạn không nuốt / bỏ qua bất kỳ ClassNotFoundException
nào có thể được ném bởi nó và tiếp tục dòng mã như thể không có gì đặc biệt xảy ra. Xem thêm Tôi phải đặt trình điều khiển JDBC cho nhóm kết nối của Tomcat ở đâu?
# 2. Hoặc, URL JDBC sai cú pháp
Bạn cần đảm bảo rằng URL JDBC phù hợp với tài liệu trình điều khiển JDBC và lưu ý rằng nó thường phân biệt chữ hoa chữ thường. Khi URL JDBC không trả về true
cho Driver#acceptsURL()
đối với bất kỳ trình điều khiển nào đã tải, bạn cũng sẽ nhận được chính xác ngoại lệ này.
Trong trường hợp PostgreSQL nó được ghi lại ở đây.
Với JDBC, cơ sở dữ liệu được đại diện bởi một URL (Bộ định vị tài nguyên đồng nhất). Với PostgreSQL ™, điều này có một trong các dạng sau:
jdbc:postgresql:database
jdbc:postgresql://host/database
jdbc:postgresql://host:port/database
Trong trường hợp MySQL nó được ghi lại ở đây.
Định dạng chung cho URL JDBC để kết nối với máy chủ MySQL như sau, với các mục trong dấu ngoặc vuông (
[ ]
) là tùy chọn:
jdbc:mysql://[host1][:port1][,[host2][:port2]]...[/[database]] » [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]
Trong trường hợp của Oracle nó được ghi lại ở đây.
Có 2 cú pháp URL, cú pháp cũ chỉ hoạt động với SID và cú pháp mới với tên dịch vụ Oracle.
Cú pháp cũ
jdbc:oracle:thin:@[HOST][:PORT]:SID
Cú pháp mới
jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
### Xem thêm:
- Tôi phải đặt trình điều khiển JDBC cho nhóm kết nối của Tomcat ở đâu?
- Cách cài đặt trình điều khiển JDBC trong dự án web Eclipse mà không gặp phải java.lang.ClassNotFoundexception
- Làm cách nào để kết nối với cơ sở dữ liệu / nguồn dữ liệu JDBC trong một ứng dụng dựa trên servlet?
- Sự khác biệt giữa "Class.forName ()" và "Class.forName (). newInstance ()" là gì?
- Kết nối Java với cơ sở dữ liệu MySQL