连接到oracle数据库时显式选择jdbc驱动程序

时间:2013-01-16 12:59:48

标签: java jdbc oracle10g oracle8i

我正在开发一些软件,有时需要连接到oracle 8.1.7数据库,有时需要连接到oracle 10g数据库才能执行某些查询。

连接到8.1.7数据库时,我需要使用ojdbc14.jar驱动程序和10g数据库的ojdbc6.jar驱动程序。

当这两个驱动程序都在类路径中时,自动驱动程序选择似乎不够聪明,无法选择正确的驱动程序,是否有任何方法可以指定我的代码中哪一个是首选?

我目前没有使用任何连接池或类似的抽象,但如果需要,引入类似的东西也不会有问题。

3 个答案:

答案 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应返回该类型