Java JDBC中的DriverManager概念是否基于提供者设计模式
在JDBC中,我们使用 Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”).newInstance() 方法将对象加载到内存中。然后,当我们使用DriverManager类获取到Sql Server的连接时,DriverManager会自动使用内存中加载的驱动程序集中的相应驱动程序。是否可以将DriverManager概念与.net中使用的提供程序设计模式进行比较?如果不是,那么我们所说的确切含义是什么 Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”) 方法,为什么不使用新关键字创建sql server驱动程序类的对象?Java JDBC中的DriverManager概念是否基于提供者设计模式,java,jdbc,Java,Jdbc,在JDBC中,我们使用 Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”).newInstance() 方法将对象加载到内存中。然后,当我们使用DriverManager类获取到Sql Server的连接时,DriverManager会自动使用内存中加载的驱动程序集中的相应驱动程序。是否可以将DriverManager概念与.net中使用的提供程序设计模式进行比较?如果不是,那么我们所说的确切含义是什么 Class.forN
类。forName(“XXXDriver”)
调用XXXDriver的静态块。
通常,静态块调用DriverManager.registerDriver(new XXXDriver())
将自身注册到DriverManager
比如:
public class XXXDriver implements Driver{
static{
//Be invoked by Class.forName("XXXDriver")
DriverManager.registerDriver(new XXXDriver())
}
...
}
不幸的是,我不知道.Net中的提供者模式。但这就是
Class.forName()
magic的作用
您不会通过newInstance()
实例化该类forName()
就足够了。(好的,我在BalusC的回答中看到了创建实例的原因。)
JDBC规范要求每个JDBC驱动程序向
DriverManager.registerDriver()注册自身。这是通过加载类时执行的静态块来完成的。类加载是通过Class.forName()
启动的。请注意,对于JDBC 4.0驱动程序,不再需要这样做: