【发布时间】:2011-06-18 16:28:01
【问题描述】:
我需要编写一个基于守护进程的 Java 进程(不是基于 Web),它将连接到 Oracle 10G 数据库,从中读取一些数据,然后连接到 SQL Server 数据库并将数据写入表。
听起来很简单,但我对此有几个疑问。
我需要有两个 jdbc 驱动程序,即一个用于连接到 Oracle 数据库,另一个用于连接到 sql server 数据库。 sql server jdbc 驱动程序是 jtds jdbc 驱动程序 (http://jtds.sourceforge.net/),对于 Oracle,我将使用标准的 oracle jdbc 驱动程序。我是否可能会同时遇到类路径中可用的两个驱动程序的任何问题?
我的猜测是,我只需要一个 ConnectionManager 类来管理连接和一个客户端 DAO 类,它会调用相关方法来获取所需的连接,具体取决于它是从 Oracle 读取还是写入 SQL服务器。这是一种合理的方法还是有更好的设计/模式?
编辑
好的,我尝试了一个快速的设计解决方案。见下图
我认为我遇到的问题是如何提交。下面是处理流程
- InvoiceBD 从工厂类获取 Oracle 连接,并调用 InvoiceUploadDAO.readData,将 Oracle 连接对象传递给它。
- InvoiceBD 从工厂类获取 SQL Server 连接并调用 InvoiceUploadDAO.writeData,将 SQL Server 连接对象传递给它。
- InvoiceBD 重复使用 Oracle 连接将 InvoiceUploadDAO.update 状态调用为 Oracle 数据库上的“完成”设置状态。
InvoiceBD 提交 Oracle 连接。 InvoiceBD 提交 SQL Server 连接。
或者如果出现问题,两个连接对象都会回滚。
这听起来对吗?
谢谢
【问题讨论】:
-
将 2 个 jdbc 驱动程序放在类路径中没有问题。关于设计/模式只需将其构建为您需要的简单/复杂。两个 Connection 变量可能足以满足您的需要。
-
图像的链接已损坏,至少从 StackOverflow 中查看是这样。顺便说一句,你为什么更新这个问题?是验证设计吗?
-
是的,只是想确保这是正确的做法。图片的直接链接是i279.photobucket.com/albums/kk128/ziggy_76/…
标签: java sql-server oracle jdbc jtds