为什么Class.forName('数据库驱动程序')?

Tii*_*iba 4 java database jdbc

为什么

Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
dbConnection = DriverManager.getConnection(strUrl, props);
Run Code Online (Sandbox Code Playgroud)

代替

dbConnection = EmbeddedDriver.connect(strUrl, props);
Run Code Online (Sandbox Code Playgroud)

指定字符串是否更容易出错,而不是编译器可以检查的类名?我看到了一个从配置中获取类名的示例,但这似乎是使用的模式,无论可用的替代方案如何.

Ell*_*sch 6

使用JDBC 4.0驱动程序(及以上),您只需要

dbConnection = DriverManager.getConnection(strUrl, props);
Run Code Online (Sandbox Code Playgroud)

根据DriverManagerjavadoc,

JDBC 4.0驱动程序必须包含文件META-INF/services/java.sql.Driver.此文件包含java.sql.Driver的JDBC驱动程序实现的名称.例如,要加载my.sql.Driver类,META-INF/services/java.sql.Driver文件将包含以下条目:

my.sql.Driver

应用程序不再需要使用Class.forName()明确加载JDBC驱动程序.当前使用Class.forName()加载JDBC驱动程序的现有程序将继续工作而无需修改.