当前位置: 首页 > 面试题库 >

从SAME VENDOR处理多个JDBC驱动程序

霍建章
2023-03-14
问题内容

昨天我遇到了一个大问题。在我当前的项目中,我使用Oracle JDBC的ojdbc6实现进行连接,但是我还需要处理例如oracle 8数据库,而使用此JAR完全不可能。您可能会说我应该使用ojdbc14例如,这在某些测试中是正确的,但是让我们假设以后我将需要处理来自同一供应商的2种数据库,但是我们知道BOTH和我都没有现有的实现需要同时加载它们。相同的接口(而且,不仅是相同的接口,相同的类结构,内部只是不同的实现!),相同的URL连接前缀-> JDBC连接将使用一个驱动程序,但我无法加载多个驱动程序。所以现在怎么办?

我的第一个想法是使用不同的类加载器加载JAR,也许我可以使用彼此分离的相同类加载相同的包结构?我并不这么认为,也许那是我的一个愚蠢想法。以后,不仅是JDBC驱动程序,这可能也是一个普遍的问题,所以即使您不能回答我的问题,但是您知道这里缺少什么,请告诉我

即使我可以单独加载具有相同类名的类实现,也可以在创建使用EXACT驱动程序的连接时而不是根据连接URL的前缀查找驱动程序时如何告诉DriverManager?(例如,我的意思是jdbc:oracle:thin)。

我现在感觉很愚蠢,因为我认为这在Java世界中并不是一个完全不寻常的想法,但是我完全不知道如何处理。

谢谢大家


问题答案:

实际上,您有两种选择:

您可以尝试从不同的类加载器加载驱动程序。如果您在应用程序中仅需要纯JDBC,那将起作用。我怀疑您将让Hibernate使用这样的设置。

最终,您将必须运行代码,在该代码中需要从两个类加载器中查看实例,在这里,您将得到ClassCastExceptions(具有相同全限定名的两个类从不同的类加载器中加载时是不同的)。

您可以将应用程序拆分为两个。第二个服务器是一台小型服务器,该服务器从原始应用程序获取命令,并将这些命令转换为数据库的JDBC。小型服务器与Oracle 8通讯,而您的应用仅与一个数据库通讯。

这种方法将允许您将两个问题完全分开,但是您将无法在两个数据库上运行联接。

您可以使用CREATE DATABASE LINK在新数据库中链接旧的Oracle 8数据库。这样可以使旧表可见,就好像它们是新数据库的一部分一样。您的应用仅与一个数据库对话,而Oracle在内部处理细节。

也许Oracle 8太旧了,无法使用,但是我绝对会尝试一下。

Oracle JDBC驱动程序可能会更加兼容。当您说“使用此JAR完全不可能”时,您尝试过吗?我过去使用Oracle 10驱动程序连接到Oracle 7。并非所有功能都受支持,但我可以运行标准查询和更新。



 类似资料:
  • 问题内容: 有人告诉我,加载JDBC驱动程序的首选方法是: 我知道,这对于从XML配置文件或用户输入中读取多个驱动程序之间的动态决策更好。我很好奇的是,调用此语句如何将指定的驱动程序加载到我们什至没有将生成的“ Class”对象存储在任何地方的环境中。JavaDocs条目说: 返回与具有给定字符串名称的类或接口关联的Class对象 在那种情况下,Java开发人员仅凭此语句如何设法促进驱动程序对象的

  • 主要内容:JDBC驱动程序是什么?,JDBC驱动程序类型,应该使用哪个驱动程序?JDBC驱动程序是什么? JDBC驱动程序在JDBC API中实现定义的接口,用于与数据库服务器进行交互。 例如,使用JDBC驱动程序,可以通过发送SQL或数据库命令,然后使用Java接收结果来打开数据库连接并与数据库进行交互。 JDK附带的包包含各种类,其类的行为被定义,实现在第三方驱动程序中完成。 第三方供应商在其数据库驱动程序中实现接口。 JDBC驱动程序类型 JDBC驱动程序实现因Java

  • 问题内容: 我想通过JDBC连接到两个不同的Oracle数据库(一个8.0.5.0.0和一个12c)。我确实有两个JDBC驱动程序,它们可以通过简单的“ hello world”应用程序分别成功地连接到相应的DB。下面,我将它们都放在一个Java应用程序中,不幸的是,该应用程序不再起作用(加载了两个驱动程序)。 我已经阅读了这篇文章:从SAMEVENDOR处理多个JDBC驱动程序。提到的选项1可能

  • 最近我从JConn2 Sybase驱动升级到了Jconn4。我的Java jdbc代码重复调用一个过程。使用jconn4时,每个proc调用的速度要慢1000倍。JConn2平均为2ms。对于JConn4,它是~2s。

  • 问题内容: 我很难确定应该如何在我的debian 6.0服务器上为PostgreSQL安装JDBC驱动程序。我已将驱动程序.jar移至以下目录: 然后,教程讨论如何使用此代码: 但是,由于我是PostgreSQL的新手,所以我不知道应该把这行放在哪里,或者这是否正确。 我的问题是,除了将jar文件移动到此位置之外,为了在我的postgreSQL安装上安装JDBC驱动程序,我实际上需要做什么? 编辑

  • 问题内容: 输出 >无法连接到数据库服务器java.lang.ClassNotFoundException 问题答案: 看来您应该将MySQL驱动程序jar放入 类路径中 。