如果不使用返回值,Class.forName()的用途是什么?
我在示例应用程序中看到了使用商业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"); } } }
每当通过Class.forName()
加载驱动程序时,都会执行静态块中的DriverManager.registerDriver()
调用。
这曾经是注册驱动程序的唯一方法。 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的连接。
到当前类加载器中的manul加载类