gpt4 book ai didi

java - 在运行时加载 JDBC 驱动程序

转载 作者:搜寻专家 更新时间:2023-10-31 19:35:43 25 4
gpt4 key购买 nike

我正在使用以下代码加载驱动程序类:

public class DriverLoader extends URLClassLoader {

private DriverLoader(URL[] urls) {
super(urls);
File driverFolder = new File("driver");
File[] files = driverFolder.listFiles();
for (File file : files) {
try {
addURL(file.toURI().toURL());
} catch (MalformedURLException e) {
}
}
}


private static DriverLoader driverLoader;


public static void load(String driverClassName) throws ClassNotFoundException {
try {
Class.forName(driverClassName);
} catch (ClassNotFoundException ex) {
if (driverLoader == null) {
URL urls[] = {};
driverLoader = new DriverLoader(urls);
}
driverLoader.loadClass(driverClassName);
}
}
}

尽管类加载正常,但无论我尝试使用哪个驱动程序,我都无法建立数据库连接(没有找到合适的驱动程序...)。

我假设这是因为我没有使用 Class.forName 加载驱动程序类(因为我使用的是自己的 ClassLoader,所以这不起作用)。我该如何解决这个问题?

最佳答案

在连接之前你需要创建一个驱动类的实例:

Class drvClass = driverLoader.loadClass(driverClassName);
Driver driver = drvClass.newInstance();

一旦您拥有了实例,您就可以使用该实例进行连接:

Properties props = new Properties();
props.put("user", "your_db_username");
props.put("password", "your_db_password");
Connection con = driver.connect("jdbc:postgresql:...", props);

作为替代方案,如果您想继续使用 DriverManager,则必须手动向 DriverManager 注册驱动程序:

DriverManager.registerDriver(driver);

然后您应该能够使用 DriverManager 建立连接。

如果我没记错的话,如果驱动程序本身不是由与 DriverManager 相同的类加载器加载的,那么 DriverManager 会拒绝连接。如果(仍然)是这种情况,您需要直接使用 Driver.connect()。

关于java - 在运行时加载 JDBC 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5674637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com