Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Khi nào thì Class.forName cần thiết khi kết nối với cơ sở dữ liệu qua JDBC trong một ứng dụng web?

Trình điều khiển JDBC4 bao gồm một tệp:

META-INF/services/java.sql.Driver

trong jar sử dụng cơ chế ServiceProvider để đăng ký triển khai Trình điều khiển với JVM (xem javadocs cho java.util.ServiceLoader ). Đó là lý do tại sao Class.forName không còn cần thiết.

Tôi đoán rằng đây là một vấn đề của trình tải lớp. ServiceLoader javadoc đề cập rằng:

Tôi sẽ thử đặt trình điều khiển của bạn vào tomcat\lib chứ không phải thư mục ứng dụng web của bạn để xem điều đó có tạo ra sự khác biệt không (trình tải lớp khác nhau?).

Nếu bạn khởi chạy ứng dụng web của mình thông qua một Ide và đặt một điểm ngắt, thì khi bạn đạt đến điểm ngắt, bạn có thể sử dụng tính năng "đánh giá biểu thức" để thực thi:ServiceLoader.load(Driver.class) . Điều này sẽ cung cấp cho bạn một ServiceLoader lớp mà bạn có thể xem qua để xem Trình điều khiển nào đã được đăng ký. Bạn có thể kiểm tra xem trình điều khiển mysql có ở đó không, nó nằm ở đâu trong danh sách, v.v., điều này có thể giúp tìm ra hành vi ở đây.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Quyền truy cập Java JDBC bị từ chối đối với người dùng

  2. Nhóm MySQL theo giờ

  3. Lỗi dữ liệu kết thúc sớm với PHP

  4. MySQL Chèn vào nhiều bảng? (Chuẩn hóa cơ sở dữ liệu?)

  5. MySQL:Cách tìm lá trong nút cụ thể