jha*_*sse 5 java jar jdbc classloader
我正在使用以下代码加载驱动程序类:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
虽然类加载很好但我无法建立数据库连接(找不到合适的驱动程序...)无论我尝试哪个驱动程序.
我假设这是因为我没有使用Class.forName加载驱动程序类(由于我使用自己的ClassLoader,因此无效).我怎样才能解决这个问题?
您需要先创建驱动程序类的实例,然后才能连接:
Class drvClass = driverLoader.loadClass(driverClassName);
Driver driver = drvClass.newInstance();
Run Code Online (Sandbox Code Playgroud)
获得实例后,您可以使用该实例进行连接:
Properties props = new Properties();
props.put("user", "your_db_username");
props.put("password", "your_db_password");
Connection con = driver.connect("jdbc:postgresql:...", props);
Run Code Online (Sandbox Code Playgroud)
或者,如果要继续使用DriverManager,则必须手动向DriverManager注册驱动程序:
DriverManager.registerDriver(driver);
Run Code Online (Sandbox Code Playgroud)
然后,您应该能够使用DriverManager建立连接.
如果我没记错的话,如果驱动程序本身未被与DriverManager相同的类加载器加载,则DriverManager拒绝连接时出现问题.如果是(仍然),则需要直接使用Driver.connect().
| 归档时间: |
|
| 查看次数: |
4768 次 |
| 最近记录: |