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

Mysql JDBC连接-Class.forName vs Class.forName().newInstance?,mysql,jdbc,Mysql,Jdbc,想知道为什么两者都Class.forName(“com.mysql.jdbc.Driver”)和Class.forName(“com.mysql.jdbc.Driver”).newInstance()在我使用它们连接到数据库时工作。没错,因为没有创建新实例,所以前者不应该不起作用吗。然而,它仍然有效。我正在使用netbeans 6.9.1。谢谢你的意见 Class.forName(“xxx”)不会创建到数据库的连接,它只是加载JDBC驱动程序并注册它,以便后续的DriverManager.get

想知道为什么两者都
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查找它时

(参考号:) DriverManager方法getConnection和getDrivers已得到增强,以支持Java标准版服务提供程序机制。JDBC4.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驱动程序的现有程序将继续工作,无需修改。

谢谢!最后一个qn-如果您确实实例化了它,那么后续的DriverManager.getConnection(..)将不会再次重新实例化它,对吗?只有在第一步没有实例化它的情况下,它才会这样做?我怀疑,仅仅通过加载类,驱动程序管理器已经实例化了它,由驱动程序中的静态块触发。老实说,我不完全确定。如果要使用已实例化的驱动程序(例如,环绕它),则需要避免使用DriverManager获取连接,或者使用DriverManager静态方法注册自己的驱动程序实例。