是否还有其他方法可以加载数据库驱动程序而不是 class.forName ?
答案 0 :(得分:9)
现代驱动程序不需要注册,因为它们有一个 META-INF / services / java.sql.Driver 文件,通过包含驱动程序的名称来声明驱动程序的存在司机班。
只需使用DriverManager.getConnection(...)
,就会发现驱动程序本身。
编辑 @Thilo:我刚刚使用PostgreSQL进行测试,它可以运行:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcDriverLoadTest {
public static void main(String[] args) throws SQLException {
Connection c = DriverManager.getConnection("jdbc:postgresql://localhost:5434/IKOffice_Core", "ik", "ik0000");
System.out.println(c.getMetaData().getDatabaseProductName());
}
}
答案 1 :(得分:4)
现代JDBC驱动程序应该在其jar文件清单中提供足够的元数据,因此您可能不需要做任何事情。
Class#forName
的要点是删除特定JDBC驱动程序的编译时依赖性(并使其在运行时可配置)。如果您在程序中使用Oracle驱动程序代码(使用非标准JDBC扩展)并且没有强制编码驱动程序类名称的强制编码,那么您也可以创建驱动程序类的常规实例。
new oracle.jdbc.driver.OracleDriver();
答案 2 :(得分:1)
通常,您只需创建一个实例,但这会导致对特定驱动程序的严重依赖。
使用Class.forName的原因是因为您可以使其可配置。它工作的原因是因为它触发了类的静态初始化器运行,这允许它注册jdbc。
简而言之,就我所知,您有两种选择:
答案 3 :(得分:1)
您还可以将驱动程序类添加到系统属性jdbc.drivers
,该属性是DriverManager
类加载的以冒号分隔的驱动程序类名列表。
示例:
java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver MyApp
答案 4 :(得分:0)
com.mysql.jdbc.Driver dr = null;