在一个Java应用程序中使用多个Oracle JDBC驱动程序?

我想通过JDBC连接到两个不同的Oracle数据库(一个8.0.5.0.0和一个12c)。我确实有两个JDBC驱动程序,它们可以通过简单的“ hello world”应用程序分别成功地连接到相应的DB。在下面,我将它们都放在一个Java应用程序中,不幸的是,该应用程序不再起作用(加载了两个驱动程序)。

我已经阅读了这篇文章:从SAME VENDOR处理多个JDBC驱动程序提到的选项1可能还有路要走,但似乎存在一个主要问题:

似乎OracleDataSource在旧版本8驱动程序中尚不存在,仅在更高版本中才引入(在12c版本驱动程序中已存在)。

关于如何通过一个Java应用程序和两个JDBC驱动程序连接到这两个Oracle数据库的任何提示?

import java.sql.*;

class db {
    public static void main (String args []) throws SQLException {

        // Oracle 8 connection
        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        Connection c1 = DriverManager.getConnection(
                "jdbc:oracle:thin:@some-oracle-8-server:port:sid",
                "my-user",
                "my-password");
        Statement s1 = c1.createStatement ();
        ResultSet r1 = s1.executeQuery ("SELECT banner FROM V$VERSION WHERE banner LIKE 'Oracle%'");
        while (r1.next ()) {
            System.out.println(r1.getString (1));
        }
        c1.close();

        // Oracle 12 connection
        Connection c2 = DriverManager.getConnection(
                "jdbc:oracle:thin:@some-oracle-12-server:port:sid",
                "my-user",
                "my-password");
        Statement s2 = c2.createStatement ();
        ResultSet r2 = s2.executeQuery ("SELECT banner FROM V$VERSION WHERE banner LIKE 'Oracle%'");
        while (r2.next ()) {
            System.out.println(r2.getString (1));
        }
        c2.close();
    }
}

谢谢你!

a_horse_with_no_name

如果不注册驱动程序,则可以避免它们由同一类加载器加载。

然后,您可以使用两个不同的驱动程序通过分别的类加载器加载连接来创建连接:

// Oracle 8 connection
File jar = new File("/path/to/oracle8.jar");
URL[] cp = new URL[1];
cp[0] = jar.toURI().toURL();
URLClassLoader ora8loader = new URLClassLoader(cp, ClassLoader.getSystemClassLoader());
Class drvClass = ora8loader.loadClass("oracle.jdbc.driver.OracleDriver");
Driver ora8driver = (Driver)drvClass.newInstance();

Properties props = new Properties();
// "user" instead of "username"
props.setProperty("user", "my-user");
props.setProperty("password", "my-password");
Connection ora8conn = ora8driver.connect("jdbc:oracle:thin:@some-oracle-8-server:port:sid",props);

然后对Oracle 12驱动程序执行相同的操作。

也许还可以通过来使用“其他”驱动程序DriverManager,但是我不确定。

在某些特殊情况下,访问Oracle特定的类会变得有些复杂,但是通常您可以使用由此创建的连接而不会出现任何问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Maven:Oracle JDBC驱动程序

来自分类Dev

Java MySQL JDBC 驱动程序异常

来自分类Dev

JDBC ODBC驱动程序连接

来自分类Dev

安装MySQL JDBC驱动程序msi

来自分类Dev

无法注册JDBC驱动程序

来自分类Dev

加载postgreSQL JDBC驱动程序

来自分类Dev

JDBC驱动程序注册死锁?

来自分类Dev

SQL Server 2014的JDBC驱动程序

来自分类Dev

TigerGraph DB的JDBC驱动程序

来自分类Dev

JDBC驱动程序实现如何工作?

来自分类Dev

加载postgreSQL JDBC驱动程序

来自分类Dev

MySQL JDBC驱动程序错误

来自分类Dev

SQL Server 2014的JDBC驱动程序

来自分类Dev

Scala和MySQL JDBC驱动程序

来自分类Dev

找不到Gerrit JDBC驱动程序

来自分类Dev

无法加载netezza JDBC驱动程序

来自分类Dev

Birt 找不到 JDBC 驱动程序

来自分类Dev

Microsoft JDBC驱动程序和jTDS JDBC驱动程序中的XA数据源

来自分类Dev

与应用程序JDBC驱动程序配置相比,JBoss JDBC驱动程序作为模块的优势

来自分类Dev

使用JDBC驱动程序在Android应用程序与Oracle DB之间建立连接

来自分类Dev

从终端编译Java程序的JDBC驱动程序问题

来自分类Dev

JDBC DriverManager尝试使用未指定的Oracle驱动程序

来自分类Dev

在Oracle Jdbc驱动程序绑定之后打印prepareStatement SQL

来自分类Dev

在Oracle jdbc驱动程序绑定之后打印prepareStatement SQL

来自分类Dev

违反协议。Oracle JDBC驱动程序问题

来自分类Dev

Java 1.7与jdbc驱动程序的兼容性

来自分类Dev

JDBC驱动程序无法在Java中正确加载

来自分类Dev

Java Class.forName,JDBC连接加载驱动程序

来自分类Dev

Java 1.7与jdbc驱动程序的兼容性