【发布时间】:2011-06-06 03:09:35
【问题描述】:
想知道为什么Class.forName("com.mysql.jdbc.Driver"); 和Class.forName("com.mysql.jdbc.Driver").newInstance(); 在我使用它们连接到数据库时都能正常工作。正确地,不是前者不应该工作,因为没有创建新实例。然而,它仍然有效。我使用的是 netbeans 6.9.1。感谢您的意见!
【问题讨论】:
想知道为什么Class.forName("com.mysql.jdbc.Driver"); 和Class.forName("com.mysql.jdbc.Driver").newInstance(); 在我使用它们连接到数据库时都能正常工作。正确地,不是前者不应该工作,因为没有创建新实例。然而,它仍然有效。我使用的是 netbeans 6.9.1。感谢您的意见!
【问题讨论】:
Class.forName("xxx") 不会创建到数据库的连接,它只是加载 JDBC 驱动程序并注册它,以便后续的DriverManager.getConnection(...) 调用可以工作。不需要自己实例化驱动程序。
【讨论】:
使用支持 jdbc 4.0 的驱动程序,您甚至不需要 Class.forName()。 驱动程序应该有内置的机制来动态加载自己, 当 DriverManager 查找它时。
(参考:http://download.oracle.com/javase/6/docs/api/java/sql/DriverManager.html) DriverManager 方法 getConnection 和 getDrivers 已得到增强,以支持 Java 标准版服务提供者机制。 JDBC 4.0 驱动程序必须包含文件 META-INF/services/java.sql.Driver。此文件包含 java.sql.Driver 的 JDBC 驱动程序实现的名称。例如,要加载 my.sql.Driver 类,META-INF/services/java.sql.Driver 文件将包含以下条目:
my.sql.Driver
应用程序不再需要使用 Class.forName() 显式加载 JDBC 驱动程序。当前使用 Class.forName() 加载 JDBC 驱动程序的现有程序将继续工作而无需修改。
【讨论】: