我在示例应用程序中看到了使用商业JDBC驱动程序的这一行:
Class.forName("name.of.a.jcdb.driver")
不使用返回值。
这条线的目的是什么?
答案 0 :(得分:23)
它执行该类的静态加载。因此,static { }
块中的任何内容都将运行。
答案 1 :(得分:12)
也许某些代码段会有所帮助。这来自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兼容驱动程序。
答案 2 :(得分:5)
在您的具体示例中,JDBC驱动程序类包含一个静态初始化程序,用于向DriverManager注册驱动程序。
答案 3 :(得分:4)
这特别用于JDBC驱动程序。 JDBC驱动程序类有一个静态初始化程序块,它使用JDBC DriverManager注册该类,以便DriverManager在您以后打开数据库连接时知道该驱动程序。
在较新版本的JDBC(我认为是JDBC 3.0)中,这不再是必需的,DriverManager使用不同的机制来查找JDBC驱动程序。
编辑 - This page详细解释了如何加载JDBC驱动程序以及驱动程序如何使用DriverManager(旧方法)注册自身。
答案 4 :(得分:2)
对于JDBC驱动程序,请求类的静态初始化程序将使用JDBC的DriverManager注册驱动程序,以便获取特定于驱动程序的URL的连接。
答案 5 :(得分:1)
到当前类加载器中的手动加载类