在Java中加载DB驱动程序的替代方法

时间:2010-09-26 07:39:07

标签: java jdbc

是否还有其他方法可以加载数据库驱动程序而不是 class.forName

5 个答案:

答案 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。

简而言之,就我所知,您有两种选择:

  • Class.forName - 允许可配置的驱动程序 - 很好
  • 直接实例化 - 创建固体类依赖 - 不太好

答案 3 :(得分:1)

您还可以将驱动程序类添加到系统属性jdbc.drivers,该属性是DriverManager类加载的以冒号分隔的驱动程序类名列表。

示例:

java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver MyApp

来源:DriverManager javadocs

答案 4 :(得分:0)

com.mysql.jdbc.Driver dr = null;