2011-01-09 47 views

回答

10

Class.forName("xxx")不创建到数据库的连接,它只是加载JDBC驱动程序并注册它,以便后续的DriverManager.getConnection(...)调用将工作。没有必要自己实例化驱动程序。

+0

谢谢!最后一个qn-如果你实例化它,那么后续的DriverManager.getConnection(..)将不会再次实例化它,对吗?只有当你没有在第一步中实例化它时,它才会这样做? – OckhamsRazor 2011-01-09 16:37:47

1

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

(ref: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 /服务/ java.sql.Driver文件需要包含下面的条目:

my.sql.Driver

应用程序不再需要显式地使用Class.forName()加载JDBC驱动程序。当前使用Class.forName()加载JDBC驱动程序的程序将继续工作而不进行修改。