我正在尝试以编程方式提取不同 JDBC 驱动程序的次要/主要版本。这些驱动程序在 jar 文件中动态提供并按如下方式加载:
URLClassLoader loader = new URLClassLoader(new URL[] { new URL("theNameOfTheJar") });
Driver driver = (Driver) Class.forName("theClassNameOfTheDriver", true, loader).newInstance();
System.out.println(driver.getMajorVersion());
System.out.println(driver.getMinorVersion());
我遇到的问题是,如果应用程序本身使用 Oracle 11g 驱动程序(首先在 DriverManager 中注册),那么之后就无法提取正确的 Oracle 10g 驱动程序版本。在这种情况下,上面的代码总是显示 11g 驱动程序版本而不是正确的 10g 版本。
我也尝试过先注销所有驱动程序,但没有成功:
Enumeration<Driver> drivers = DriverManager.getDrivers();
while(drivers.hasMoreElements()) {
Driver d = drivers.nextElement();
try {
DriverManager.deregisterDriver(d);
} catch (SQLException ex) {
// TODO Auto-generated catch block
ex.printStackTrace();
}
}
是否有可能提取正确的驱动程序信息?