JDBC中的DriverManager概念是否基于提供者设计模式

时间:2011-02-21 13:33:34

标签: java jdbc

在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驱动程序类的对象?

2 个答案:

答案 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()启动的。