我想通过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();
}
}
谢谢你!
如果不注册驱动程序,则可以避免它们由同一类加载器加载。
然后,您可以使用两个不同的驱动程序通过分别的类加载器加载连接来创建连接:
// 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] 删除。
我来说两句