gpt4 book ai didi

jdbc - 处理来自同一供应商的多个 JDBC 驱动程序

转载 作者:行者123 更新时间:2023-12-04 19:15:50 30 4
gpt4 key购买 nike

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

  • 我的第一个想法是用不同的类加载器加载 JAR,也许我可以加载相同的包结构,相同的类彼此分开?我真的不这么认为,也许这是我的一个愚蠢的想法。以后这也可能是一个普遍问题,而不仅仅是 JDBC 驱动程序,所以即使你不能回答我的问题,但你知道这里缺少什么,请告诉我
  • 即使我可以单独加载相同类名的类实现,在创建连接时如何告诉 DriverManager 使用 EXACT 驱动程序而不是根据连接 url 的前缀找到一个? (例如,我的意思是 jdbc:oracle:thin)。

  • 我现在感觉自己像个傻子,因为我认为这在 Java 世界中并不是一个完全不同寻常的想法,但我完全不知道如何处理。

    提前谢谢大家

    最佳答案

    你实际上有几个选择:

  • 您可以尝试从不同的类加载器加载驱动程序。如果您的应用程序中只需要纯 JDBC,这将起作用。我怀疑你会让 Hibernate 使用这样的设置。
    最终,您将不得不在需要查看来自两个类加载器的实例的地方运行代码,在这里,您将获得 ClassCastException。 s(具有相同全限定名的两个类在从不同的类加载器加载时是不同的)。
  • 您可以将您的应用程序一分为二。第二个是一个小型服务器,它从您的原始应用程序中获取命令并将这些命令转换为数据库的 JDBC。小型服务器与 Oracle 8 通信,而您的应用程序仅与一个数据库通信。
    这种方法可以让您将两个关注点完全分开,但您将无法在两个数据库上运行连接。
  • 您可以使用 CREATE DATABASE LINK 将旧的 Oracle 8 数据库链接到新数据库中。 .这使得旧表可见,就好像它们是新数据库的一部分一样。您的应用程序只与一个数据库对话,Oracle 在内部处理细节。
    也许 Oracle 8 太旧了,无法正常工作,但我肯定会尝试一下。
  • Oracle JDBC 驱动程序比您预期的更兼容。当你说“这个 JAR 完全不可能”时,你有没有 试试它?我过去使用 Oracle 10 驱动程序连接到 Oracle 7。并非所有功能都受支持,但我可以运行标准查询和更新。
  • 关于jdbc - 处理来自同一供应商的多个 JDBC 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9597613/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com