5

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

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

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

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

4

3 回答 3

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 类路径上,它们对于应用程序类加载器应该是不可见的

于 2013-01-16T13:41:34.917 回答
1

您无法决定使用连接池在运行时使用哪个驱动程序,但是使用连接池(具有 xml 格式的定义)您无需在更改驱动程序后一次又一次地编译代码。

但是对于运行时驱动程序选择实现,您可以创建自己的 SQL 帮助器类,所有 SQL 配置和 SQL 相关操作都将在其中执行。在其中创建一个名为 openConnection(String driver, String username, String password) 的方法,在这里您可以决定我们在运行时使用哪个驱动程序。

于 2013-01-16T13:07:59.123 回答
0

您可以创建一个驱动程序工厂类来抽象要使用的驱动程序版本

从您的运行时提供输入作为您想要的驱动程序类型,工厂应返回该特定类型

于 2013-01-16T13:18:26.463 回答