java实现从一个远程oracle数据库提取数据,之后写入本地的SQLserver数据库里。

比如说oracle数据库是一个学生信息表(姓名,性别,学号,班级,年龄),SQLserver数据库也是一个学生信息表,只需要姓名,性别两项即可。而且,oracle数据库是... 比如说oracle数据库是一个学生信息表(姓名,性别,学号,班级,年龄),SQLserver数据库也是一个学生信息表,只需要姓名,性别两项即可。而且,oracle数据库是实时更新的,大概每5分钟更新一次。SQLserver数据库也要实时更新。 展开
 我来答
mgkdrtmh1000
2012-02-29 · 贡献了超过266个回答
知道答主
回答量:266
采纳率:0%
帮助的人:88.2万
展开全部
链接数据库用到JDBC,一般链接数据库都要用到数据库驱动、链接字符串、登录名、登录密码。这4个属性可以提取到一个父类中,每一种数据库写一个类继承父类。要是这些都没问题了,就可以用楼上哥们儿说的,简单工厂模式,简单工厂是用到了java中的多态特性。 import java.sql.Connection; public abstract class BaseConnect { public BaseConnect(String driverClass, String url, String loginName, String password) { super(); this.driverClass = driverClass; this.url = url; this.loginName = loginName; this.password = password; } protected String driverClass; protected String url; protected String loginName; protected String password; public abstract void initDriver(); public abstract Connection getConnect(); public abstract void closeConnect(Connection conn); } import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class OraclConnect extends BaseConnect { public OraclConnect(String driverClass, String url, String loginName, String password) { super(driverClass, url, loginName, password); // TODO Auto-generated constructor stub } @Override public void initDriver() { try { Class.forName(driverClass); } catch (ClassNotFoundException e) { e.printStackTrace(); } } @Override public Connection getConnect() { try { return DriverManager.getConnection(url, loginName, password); } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public void closeConnect(Connection conn) { try { if (conn != null && !conn.isClosed()) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } 以此类推,上面代码是我随便一写,你自己再改进下。 蓝屏
null2015
2012-02-28 · 超过60用户采纳过TA的回答
知道小有建树答主
回答量:141
采纳率:0%
帮助的人:152万
展开全部
既然是JAVA,就是要来个ETL功能了。
由于没有事件,无法真正的“实时”。用JAVA的Timer.interval或者Thread.sleep()都可以。在主程序上另起个线程,每隔一段时间(比如10秒)读下ORACLE,看有没有“增量”(插入、更新)的数据,有就写到本地SQLSERVER里。
追问
能不能给具体代码,谢谢
追答
给个伪代码表示下流程,具体数据库操作、线程操作查看相关书籍把:
private Calendar calBegin = Calendar.getInstance() - (1/1440); // 初始化执行时间为1分钟之前
public void myFunc() // 这个方法可以用线程或Timer调用
{
select * from removeORACLE.TABLE where someDateField calBegin; // 查找更新时间在历史执行时间到当前时间之间的记录,这里,远程数据表中必须有“更新时间”的字段,即记录插入、修改时的时间点记录
insert into localSQLSERVER.TABLE with selected dataRow; // 将选择的记录插入本地数据库
}
线程Thread.sleep(10*1000)或设置Timer.interval=10*1000,都可以间隔10秒后继续执行新一轮的操作。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式