Đã tự hỏi tại sao cả hai Class.forName("com.mysql.jdbc.Driver");
và Class.forName("com.mysql.jdbc.Driver").newInstance();
hoạt động khi tôi sử dụng chúng để kết nối với cơ sở dữ liệu. Bởi đúng, không phải là trước đây không phải làm việc, vì không có trường hợp mới được tạo ra. Tuy nhiên, nó vẫn hoạt động. Im sử dụng netbeans 6.9.1. Cảm ơn vì đầu vào của bạn!Kết nối JDBC- Class.forName vs Class.forName(). NewInstance?
Trả lời
Class.forName("xxx")
không tạo kết nối tới cơ sở dữ liệu, nó chỉ tải trình điều khiển JDBC và đăng ký nó để cuộc gọi DriverManager.getConnection(...)
tiếp theo sẽ hoạt động. Việc tự khởi động trình điều khiển là không cần thiết.
Với trình điều khiển hỗ trợ jdbc 4.0 bạn thậm chí không cần Class.forName(). Trình điều khiển được cho là có trong cơ chế được xây dựng để tải chính nó trên bay, khi DriverManager tìm kiếm nó.
(ref: http://download.oracle.com/javase/6/docs/api/java/sql/DriverManager.html) Các phương pháp DriverManager getConnection và getDrivers đã được cải tiến để hỗ trợ cơ chế Nhà cung cấp dịch vụ Java Standard Edition. Trình điều khiển JDBC 4.0 phải bao gồm tệp META-INF/services/java.sql.Driver. Tệp này chứa tên của việc thực hiện trình điều khiển JDBC của java.sql.Driver. Ví dụ, để tải các lớp my.sql.Driver, thư mục META-INF tập tin/dịch vụ/java.sql.Driver sẽ chứa các mục:
my.sql.Driver
ứng dụng không còn cần phải explictly tải các trình điều khiển JDBC bằng Class.forName(). Các chương trình hiện đang tải trình điều khiển JDBC bằng Class.forName() sẽ tiếp tục hoạt động mà không cần sửa đổi.
- 1. Class.forName() bộ nhớ đệm
- 2. Class.forName() throws ClassNotFoundException
- 3. Khởi tạo đối tượng singleton bằng Class.forName()?
- 4. Trong Java, kết nối với mysql, ý nghĩa của Class.forName là gì?
- 5. Class.forName là cho ClassNotFound Exception
- 6. Kết nối JDBC trong Android
- 7. Java Class.forName() từ thư mục xa
- 8. Java: Sự khác nhau giữa Class.forName và ClassLoader.loadClass
- 9. nhanh chóng lồng lớp tĩnh nhờ sủ dụng Class.forName
- 10. Sự khác nhau giữa MyClass.class và Class.forName ("className")
- 11. newInstance() vs new
- 12. Kết nối JDBC treo
- 13. Kết nối JDBC an toàn
- 14. theo dõi kết nối JDBC
- 15. trình điều khiển JDBC kết nối MS Access
- 16. Không thể kết nối với MySQL với JDBC - Thời gian chờ kết nối - Ubuntu 9.04
- 17. Hồ bơi kết nối JDBC Tomcat (phát hành kết nối)
- 18. Thiếu kết nối trong hồ bơi kết nối jdbc tomcat
- 19. Tạo phân đoạn: hàm tạo vs newInstance()
- 20. Sẽ sử dụng class.forname nhiều lần gây ra rò rỉ bộ nhớ? (chạy bên trong tomcat)
- 21. Lỗi khi kết nối bằng JDBC Mysql
- 22. Java JDBC tình trạng kết nối
- 23. Tomcat và kết nối JDBC pooling
- 24. JDBC- postgres, kết nối từ chối
- 25. Python 3 - Kết nối với JDBC
- 26. Thực hành tốt: Kết nối JDBC
- 27. Kết nối TCP/IP với máy chủ lưu trữ cục bộ, cổng 1433 không thành công
- 28. Kết nối với máy chủ sql từ java với jdbc (chế độ xác thực cửa sổ)
- 29. MySQL - kết nối liên tục vs kết nối tổng hợp
- 30. Hồ bơi kết nối JDBC không mở lại Các kết nối trong tomcat
cảm ơn! một qn- nếu u khởi tạo nó, thì DriverManager.getConnection tiếp theo (..) sẽ không khởi tạo lại nó, đúng không? Nó sẽ làm như vậy chỉ khi bạn không khởi tạo nó trong bước đầu tiên? – OckhamsRazor
Tôi nghi ngờ rằng chỉ bằng cách tải lớp, trình quản lý trình điều khiển đã khởi tạo nó, được kích hoạt bởi một khối tĩnh trong trình điều khiển. Thành thật mà nói, tôi không hoàn toàn chắc chắn. Nếu bạn muốn sử dụng trình điều khiển bạn đã khởi tạo (ví dụ như quấn quanh nó), bạn cần tránh sử dụng DriverManager để nhận kết nối hoặc đăng ký cá thể trình điều khiển của riêng bạn bằng các phương pháp tĩnh DriverManager. – araqnid