我已经看到了使用商业JDBC驱动程序的一个示例应用程序这一行:
Class.forName("name.of.a.jcdb.driver")
未使用的返回值。
什么用途此行服务?
我已经看到了使用商业JDBC驱动程序的一个示例应用程序这一行:
Class.forName("name.of.a.jcdb.driver")
未使用的返回值。
什么用途此行服务?
它执行这个类的静态负载。 因此,在任何static { }
块,将运行。
也许有些代码段会有所帮助。 这是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兼容驱动程序这样做了。
在您的具体的例子,JDBC驱动程序类包含注册驱动程序将在一个静态初始化程序的DriverManager 。
这是特别用于JDBC驱动程序。 JDBC驱动程序类有一个静态初始化块注册到JDBC的DriverManager类,这样的DriverManager知道,当你以后打开数据库连接的驱动程序。
在JDBC的新版本(JDBC 3.0,我认为)这是没有必要的了,不同的机构使用的DriverManager找到JDBC驱动程序。
编辑 - 本页面详细解释了如何加载JDBC驱动程序的工作原理及驱动程序本身如何向DriverManager注册(旧的方式)。
在JDBC驱动程序的情况下,请求的类的静态初始化将注册JDBC的驱动程序的DriverManager以便获得特定的驱动程序的URL的连接工作。
到狲在当前类装载器负载类