在JDBC中我们使用
的Class.forName( “com.microsoft.sqlserver.jdbc.SQLServerDriver”)的newInstance();
将对象加载到内存中的方法。然后,当我们使用DriverManager类获取与Sql Server的连接时,DriverManager会自动使用内存中加载的驱动程序集中的相应驱动程序。可以将DriverManager概念与.net中使用的Provider设计模式进行比较吗?如果没有,那么我们究竟是什么意思
的Class.forName( “com.microsoft.sqlserver.jdbc.SQLServerDriver”)
方法以及为什么我们不使用new关键字创建sql server驱动程序类的对象?
答案 0 :(得分:1)
Class.forName("XXXDriver")
调用XXXDriver的静态阻止。
通常,静态块会调用DriverManager.registerDriver(new XXXDriver())
将自身注册到DriverManager
。
类似的东西:
public class XXXDriver implements Driver{
static{
//Be invoked by Class.forName("XXXDriver")
DriverManager.registerDriver(new XXXDriver())
}
...
}
答案 1 :(得分:0)
不幸的是,我不知道.Net中的提供者模式。但这就是Class.forName()
魔法的用途。
您不会通过newInstance()
实例化该课程。 forName()
就够了。 (好的,我在BalusC的答案中看到了实例创建的原因。)
JDBC规范要求每个JDBC驱动程序都使用DriverManager.registerDriver()
注册自己。这是通过在加载类时执行的静态块来完成的。类加载是通过Class.forName()
启动的。