我正在开发一些软件,有时需要连接到oracle 8.1.7数据库,有时需要连接到oracle 10g数据库才能执行某些查询。
连接到8.1.7数据库时,我需要使用ojdbc14.jar驱动程序和10g数据库的ojdbc6.jar驱动程序。
当这两个驱动程序都在类路径中时,自动驱动程序选择似乎不够聪明,无法选择正确的驱动程序,是否有任何方法可以指定我的代码中哪一个是首选?
我目前没有使用任何连接池或类似的抽象,但如果需要,引入类似的东西也不会有问题。
答案 0 :(得分:4)
如果你没有使用dbcp,那么就可以这样做
class Test
static Driver driver5;
static Driver driver6;
static void init() throws Exception {
ClassLoader cl5 = new URLClassLoader(new URL[] { new URL("file:lib/ojdbc15.jar") });
driver5 = (Driver) cl5.loadClass("oracle.jdbc.driver.OracleDriver").newInstance();
ClassLoader cl6 = new URLClassLoader(new URL[] { new URL("file:lib/ojdbc6.jar") });
driver6 = (Driver) cl6.loadClass("oracle.jdbc.driver.OracleDriver").newInstance();
}
public static void main(String[] args) throws Exception {
Properties props = new Properties();
props.put("user", "user");
props.put("password", "pwd");
String url = "jdbc:oracle:thin:@host:1529:sid";
Connection conn5 = driver5.connect(url, props);
Connection conn6 = driver6.connect(url, props);
}
请注意,ojdbc15.jar和ojdbc6.jar不应该在java类路径上,它们应该对应用程序类加载器不可见
答案 1 :(得分:1)
您不能决定使用连接池在运行时使用哪个驱动程序,而是使用连接池(具有xml格式的定义),您无需在更改驱动程序后反复编译代码。
但是对于运行时驱动程序选择实现,您可以创建自己的SQL帮助程序类,其中将执行所有SQL配置和SQL相关操作。在那里创建一个名为openConnection的方法(String driver,String username,String password),在这里你可以决定我们在运行时使用哪个驱动程序。
答案 2 :(得分:0)
您可以创建一个驱动程序工厂类,它抽象使用哪个驱动程序版本
从您的运行时提供输入,您需要哪种类型的驱动程序,Factory应返回该类型