我正在开发一些软件,这些软件有时需要连接到 oracle 8.1.7 数据库,有时需要连接到 oracle 10g 数据库才能执行一些查询。
连接到 8.1.7 数据库时,我需要使用 ojdbc14.jar 驱动程序和 10g 数据库的 ojdbc6.jar 驱动程序。
当这两个驱动程序都在类路径中时,自动驱动程序选择似乎不够聪明,无法选择正确的驱动程序,有什么方法可以在我的代码中指定首选哪个驱动程序?
我目前没有使用任何连接池或类似的抽象,但如果需要,引入类似的东西不会有问题。
如果你不使用 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 类路径上,它们对于应用程序类加载器应该是不可见的
您无法决定使用连接池在运行时使用哪个驱动程序,但是使用连接池(具有 xml 格式的定义)您无需在更改驱动程序后一次又一次地编译代码。
但是对于运行时驱动程序选择实现,您可以创建自己的 SQL 帮助器类,所有 SQL 配置和 SQL 相关操作都将在其中执行。在其中创建一个名为 openConnection(String driver, String username, String password) 的方法,在这里您可以决定我们在运行时使用哪个驱动程序。
您可以创建一个驱动程序工厂类来抽象要使用的驱动程序版本
从您的运行时提供输入作为您想要的驱动程序类型,工厂应返回该特定类型