使用不同的 jdbc 驱动程序连接到多个数据库

2024-01-15

我需要编写一个基于守护进程的java进程(不是基于web的),它将连接到Oracle 10G数据库,从中读取一些数据,然后连接到SQL Server数据库并将数据写入表中。

听起来很简单,但我对此有几个疑问。

  • 我需要有两个 jdbc 驱动程序,即一个用于连接到 Oracle 数据库,另一个用于连接到 sql server 数据库。 sql server jdbc驱动程序是jtds jdbc驱动程序(http://jtds.sourceforge.net/ http://jtds.sourceforge.net/)对于 Oracle,我将使用标准的 oracle jdbc 驱动程序。我是否可能会遇到类路径中同时提供的两个驱动程序的任何问题?

  • 我的猜测是,我需要的只是一个用于管理连接的 ConnectionManager 类和一个客户端 DAO 类,该类将调用相关方法来获取所需的连接,具体取决于它是从 Oracle 读取还是写入 SQL Server。这是一个合理的方法还是有更好的设计/模式?

EDIT

好吧,我尝试整合一个快速的设计解决方案。见下图

我认为我遇到的问题是如何承诺。这是处理流程

  • InvoiceBD 从工厂类获取 Oracle 连接,并调用 InvoiceUploadDAO.readData 向其传递 Oracle 连接对象。
  • InvoiceBD 从工厂类获取 SQL Server 连接,并调用 InvoiceUploadDAO.writeData 向其传递 SQL Server 连接对象。
  • InvoiceBD 重用 Oracle 连接来调用 InvoiceUploadDAO.update status 以将 Oracle 数据库上的状态设置为“完成”。

InvoiceBD 提交 Oracle 连接。 InvoiceBD 提交 SQL Server 连接。

或者,如果出现问题,两个连接对象都会回滚。

那个听起来是对的吗?

Thanks


我是否可能会遇到类路径中同时提供的两个驱动程序的任何问题?

不太可能。这DriverManager.getConnection方法实际上将连接的构建委托给所有向其注册的驱动程序。只有识别 JDBC URL 中的协议的驱动程序才会返回连接。 JDBC 规范指出:

当。。。的时候DriverManager正在努力 建立连接,它调用 驱动程序的 connect 方法并传递 驱动程序的 URL。如果Driver实现理解 URL,它 将返回一个Connection目的; 否则它返回null.

...

JDBC URL 的格式为:

jdbc:<subprotocol>:<subname>

对于 jTDS 和 Oracle(瘦)驱动程序,协议格式不同,因此,您永远不会遇到问题。但是,请记住不要放置同一驱动程序的多个版本。

这是一个合理的方法还是有更好的设计/模式?

您正在寻找一个DataSource。数据源在 Java EE 环境中可用,而不是在 Java SE 应用程序中可用。但是,您可以构建自己的 DataSource 或类似的类;您不需要实现 DataSource 接口本身,但您可以执行类似的操作。在您的情况下,ConnectionManager您的类将通过可能接受区分要连接到哪个数据库的参数来承担数据源的角色;如果您需要一个连接池,您可以考虑使用连接池(如果您只需要一个到数据库的连接,则不太可能)。

您还可以采用 @duffymo 构建 DAO 类的方法,尽管它更适合 SQL 查询不同的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用不同的 jdbc 驱动程序连接到多个数据库 的相关文章

  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • GWT - 如何组织项目以拥有多个网页以及它们之间的导航

    我是 GET 的新手 顺便说一句 它给我留下了深刻的印象 并且发现它对于像我这样熟悉 C NET 桌面技术并愿意编写 Web 应用程序的人来说非常有吸引力 我根据 GWT Eclipse 向导生成的示例启动了自己的项目 该项目生成带有面板的
  • 使用 MS Access 链接表连接到 SQL Server 后端时是否可能发生 SQL 注入

    我一直在对此进行一些研究 但到目前为止还是一片空白 情况是这样的 我正在开发一个链接到 SQL Server 后端的 MS Access 前端 我在某种程度上使用 Access 中的链接表 表单访问 SQL DB 这样 当用户更新表单中的值
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • 需要使用 joda 进行灵活的日期时间转换

    我想使用 joda 解析电子邮件中的日期时间字符串 不幸的是我得到了各种不同的格式 例如 Wed 19 Jan 2011 12 52 31 0600 Wed 19 Jan 2011 10 15 34 0800 PST Wed 19 Jan
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • 在对象数组内的特定 JSON 值上创建索引

    假设我的表中有一个 varchar 列 其结构如下 Response DataArray Type Address Value 123 Fake St Type Name Value John Doe 我想在 DataArray 数组元素的
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • 分组和切换列和行

    我不知道这是否会被正式称为枢轴 但我想要的结果是这样的 Alex Charley Liza 213 345 1 23 111 5 42 52 2 323 5 23 1 324 5 我的输入数据采用这种形式 Apt Name
  • Java中HashMap和ArrayList的区别?

    在爪哇 ArrayList and HashMap被用作集合 但我不明白我们应该在哪些情况下使用ArrayList以及使用时间HashMap 他们两者之间的主要区别是什么 您具体询问的是 ArrayList 和 HashMap 但我认为要完
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • F# 中 Control.Observable 和 Control.Event 模块之间有哪些相似/差异?

    F 至少在 Visual Studio 2012 中 两者兼而有之Control Observable http msdn microsoft com en us library ee370313 v vs 110 aspx and Con
  • 带有scope.$watch的Angular指令强制验证其他字段

    我写了一个match model当用户在我的应用程序中注册时 我用于密码 密码重复过程的角度指令 密码重复字段具有此特定属性 可根据原始密码字段验证此字段 我的指令有scope watch出于优化目的 因为我不必每次验证重复密码范围属性时都
  • 枚举和使用带有常量的静态类有什么区别?

    这两项之间的性能影响是什么 我最近在野外看到了静态类 但我不知道如何理解它 public enum SomeEnum One 1 Two Three public static class SomeClass public static r
  • OpenGL 二进制程序格式是否标准化?

    我一直在谷歌上搜索 OpenGL 二进制格式及其实际含义 到目前为止我还没有取得太大的成功 我知道我可以按如下方式获取数量和格式集 glGetIntegerv GL PROGRAM BINARY FORMATS values 0 其中 va
  • NX Monorepo 和库中的情感主题

    我们想用useTheme from emotion react在库内和我们的应用程序内 我们正在使用 反应本机网络 nx monorepo 反应本机 这是我们的结构 apps web ReactJS mobile React native
  • 如何使用 Gallio 和 MBUnit 以编程方式运行单元测试?

    作为部署过程的一部分 我正在尝试以编程方式检查我的单元测试是否通过 该应用程序使用 MBunit 和 Gallio 作为其单元测试框架 这是我的代码 var setup new Gallio Runtime RuntimeSetup set
  • ASP.NET MVC 操作被调用两次

    我有一个特定的控制器操作被调用两次 这除了奇怪之外还导致我的应用程序的单例部分出现问题 这并不是真正的问题 它只是引起了我对两次调用的注意 知道为什么控制器操作每次都会执行两次吗 不回来false或者阻止对通过 AJAX 进行调用的链接上的
  • 如何将 QFlags 与 QML 结合使用?

    我有一个我创建的 QFlag 我想在 QML 中使用这个 QFlag 具体来说 我希望能够将几个标志组合在一起 并将它们作为参数传递给方法 我注意到这里没有明确列出 QFlags 作为 QML 支持的数据类型 http doc qt nok
  • iOS .onContinueUserActivity 未被调用

    onContinueUserActivity从未被调用过Apple 提供的状态恢复示例应用程序 https developer apple com documentation swiftui restoring your app s sta
  • 哪些语言向开发人员公开 IEEE 754 陷阱?

    我想出于教育目的玩这些陷阱 数值微积分中默认行为的一个常见问题是我们 错过 了错误运算中出现的 Nan 或 inf 默认行为是通过计算进行传播 但某些操作 如比较 会破坏链条并释放 Nan 并且其余处理将继续 而不会在算法的先前步骤中确认奇
  • Mysql存储函数和分组最小值[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Schema 数据库架构得到简化 活动表该表存储事件 CREATE TABLE Events event id bigint 20 u
  • MethodImpl(AggressiveInlined) - 它有多激进?

    所以我稍微看了一下MethodImpl 属性 http msdn microsoft com en us library system runtime compilerservices methodimplattribute v vs 11
  • iOS 中 Unity Json.net System.Reflection.Emit 错误

    我按照说明将 link xml 包含在 asset 文件夹中 但仍然收到错误 我认为这可能与反序列化字典有关 因为错误紧随其后 System Collection Generic IDictionary 2 set Item TKey TV
  • 如何在注释处理中引用方法的实现?

    我正在研究 Java javax 注释处理 假设我有一个方法注释 Target ElementType METHOD public interface MethodAnnotation 现在我想处理从带注释的方法的类型重写的所有方法 int
  • 主干视图的私有和公共变量

    在主干视图中 您将把私有变量和公共变量放在哪里 现在我有这样的事情 myView Backbone View extend initialize function options this myPublic I m public 我尝试添加
  • array_map 和 htmlentities

    我一直在尝试使用array map to 将字符转换为 HTML 实体 with htmlentities 像这样 lang array map htmlentities lang 我的数组如下所示 lang array lang var
  • 如何在没有 Amazon Cognito 的情况下使用 AWS S3?

    我正在使用 Node js REST API 来验证我的用户 一旦他们通过身份验证 我就允许他们发布带有文字的照片 我的计划是将照片的文本和 URL 存储在数据库中 这样 当他们访问帖子提要时 我的应用程序将查询数据库以获取文本和 URL
  • PyQt6:AttributeError:类型对象“QImage”没有属性“Format_RGB888”[重复]

    这个问题在这里已经有答案了 我试图将代码从 PyQt5 移植到 PyQt6 但出现以下错误 AttributeError type object QImage has no attribute Format RGB888 尽管在 PyQt6
  • “+var === +var”内部如何工作来验证 var 是否是数字?

    看到这个问题 JavaScript 中是否有一种 内置 方法来检查字符串是否为有效数字 https stackoverflow com questions 175739 is there a built in way in javascri
  • 使用不同的 jdbc 驱动程序连接到多个数据库

    我需要编写一个基于守护进程的java进程 不是基于web的 它将连接到Oracle 10G数据库 从中读取一些数据 然后连接到SQL Server数据库并将数据写入表中 听起来很简单 但我对此有几个疑问 我需要有两个 jdbc 驱动程序 即