【问题标题】:Is the DriverManager concept in JDBC based on the provider design patternJDBC中的DriverManager概念是基于provider设计模式的吗
【发布时间】:2011-02-21 13:33:34
【问题描述】:

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

【问题讨论】:

标签: java jdbc


【解决方案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())
  }
...
}

【讨论】:

    【解决方案2】:

    不幸的是,我不知道 .Net 中的提供者模式。但这就是 Class.forName() 魔法的用途。

    您不会通过newInstance() 实例化该类。 forName() 就够了。 (好的,我在 BalusC 的回答中看到了创建实例的原因。)

    JDBC 规范要求每个 JDBC 驱动程序都向DriverManager.registerDriver() 注册自己。这是通过加载类时执行的静态块完成的。类加载通过Class.forName() 启动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-04
      • 2015-07-01
      • 2013-03-28
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      相关资源
      最近更新 更多