21

我在使用商业 JDBC 驱动程序的示例应用程序中看到了这一行:

Class.forName("name.of.a.jcdb.driver")

不使用返回值。

这条线的用途是什么?

4

5 回答 5

27

它执行该类的静态加载。所以static { }块中的任何东西都会运行。

于 2009-08-21T07:35:17.863 回答
13

也许一些代码片段会有所帮助。这是来自 Sun 的 JDBC-ODBC 桥驱动程序,

//--------------------------------------------------------------------
// Static method to be executed when the class is loaded.
//--------------------------------------------------------------------


static
{       
    JdbcOdbcTracer tracer1 = new JdbcOdbcTracer();
    if (tracer1.isTracing ()) {
        tracer1.trace ("JdbcOdbcDriver class loaded");
    }

    JdbcOdbcDriver driver = new JdbcOdbcDriver ();

    // Attempt to register the driver

    try {
        DriverManager.registerDriver (driver);
    }
    catch (SQLException ex) {
        if (tracer1.isTracing ()) {
            tracer1.trace ("Unable to register driver");
        }  
    }
}

DriverManager.registerDriver()每当通过 加载驱动程序时,都会执行静态块中的调用Class.forName()

这曾经是注册驱动程序的唯一方法。JDBC 4.0 引入了一种新的服务注册机制,因此您不再需要使用更新的 JDBC 4.0 兼容驱动程序来执行此操作。

于 2009-08-21T10:07:28.290 回答
5

在您的具体示例中,JDBC 驱动程序类包含一个静态初始化程序,它将驱动程序注册到DriverManager

于 2009-08-21T07:38:45.313 回答
4

这特别用于 JDBC 驱动程序。JDBC 驱动程序类有一个静态初始化程序块,它向 JDBC DriverManager 注册该类,以便 DriverManager 在您以后打开数据库连接时知道该驱动程序。

在较新版本的 JDBC(我认为是 JDBC 3.0)中,这不再是必需的,DriverManager 使用不同的机制来查找 JDBC 驱动程序。

编辑-此页面详细解释了加载 JDBC 驱动程序的工作原理以及驱动程序如何将自身注册到 DriverManager(旧方式)。

于 2009-08-21T07:40:03.907 回答
2

对于 JDBC 驱动程序,所请求类的静态初始化程序将向 JDBC 的DriverManager注册驱动程序,以便为特定于驱动程序的 URL 获取连接。

于 2009-08-21T07:39:12.473 回答