JDBC连接 - Class.forName vs Class.forName()。newInstance?

时间:2011-01-09 16:27:55

标签: mysql jdbc

想知道为什么Class.forName("com.mysql.jdbc.Driver");Class.forName("com.mysql.jdbc.Driver").newInstance();在我用它们连接数据库时都能正常工作。通过权利,不是前者不应该工作,因为没有创建新的实例。然而,它仍然有效。我使用netbeans 6.9.1。感谢您的投入!

2 个答案:

答案 0 :(得分:10)

Class.forName("xxx")不会创建与数据库的连接,它只是加载JDBC驱动程序并对其进行注册,以便后续的DriverManager.getConnection(...)调用可以正常工作。不需要自己实例化驱动程序。

答案 1 :(得分:1)

使用支持jdbc 4.0的驱动程序,您甚至不需要Class.forName()。 驱动程序应该具有内置机制来动态加载自身, 当DriverManager查找它时。

(参考:http://download.oracle.com/javase/6/docs/api/java/sql/DriverManager.html) DriverManager方法getConnection和getDrivers已得到增强,可支持Java Standard Edition Service Provider机制。 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驱动程序的现有程序将继续工作而无需修改。