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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现从一个远程oracle数据库提取数据,之后写入本地的SQLserver数据库里。相关的知识,希望对你有一定的参考价值。

比如说oracle数据库是一个学生信息表(姓名,性别,学号,班级,年龄),SQLserver数据库也是一个学生信息表,只需要姓名,性别两项即可。而且,oracle数据库是实时更新的,大概每5分钟更新一次。SQLserver数据库也要实时更新。

链接数据库用到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(); 以此类推,上面代码是我随便一写,你自己再改进下。蓝屏 参考技术A 既然是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秒后继续执行新一轮的操作。

本回答被提问者和网友采纳

oracle exp imp实现导出导入

一.说明
   oracle 的exp/imp命令用于实现对数据库的导出/导入操作;

   exp命令用于把数据从远程数据库服务器导出至本地,生成dmp文件;

   imp命令用于把本地的数据库dmp文件从本地导入到远程的Oracle数据库中。

 

二.下面介绍的是导入导出的实例。
数据导出:

 

exp myname/[email protected]/orcl file = d:my.dmp
--将数据库完全导出
exp myname/[email protected]/orcl file = d:my.dmp full = y
--只导出用户myuser下的表
exp myname/[email protected]/orcl file = d:my.dmp owner = (myuser)
--只导出test1、test2表
exp myname/[email protected]/orcl file = d:my.dmp tables=(test1,test2)

 

 

数据导入:

 

--全部导入
imp myname/[email protected]/orcl file = d:my.dmp full = y
--全部导入,忽略已存在数据
imp myname/[email protected]/orcl file = d:my.dmp full = y ignore=y
--只导入test1 test2表
imp myname/[email protected]/orcl file = d:my.dmp tables=(test1,test2)

 

 

 

exp导出的时候  owner和tables只能指定其一
否则报错
EXP-00026: 指定了冲突模式
EXP-00000: 导出终止失败

imp导入的时候 full和tables只能指定其一
否则报错

 

 

IMP-00024: 只能指定一种模式 (TABLES, FROMUSER 或 FULL)
IMP-00000: 未成功终止导入

PS:只对命令作简单说明,参数众多,能实现基本诉求即可,如需详细了解,查阅相关资料。

 

 


再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow













以上是关于java实现从一个远程oracle数据库提取数据,之后写入本地的SQLserver数据库里。的主要内容,如果未能解决你的问题,请参考以下文章

java连接Oracle数据库,从ResultSet中提取数据出现java.sql.sqlException结果集已耗尽

Oracle连接到SqlServer,如何实现呢?

oracle exp imp实现导出导入

从 4 个远程服务器中提取大量数据的最佳技术是啥 [关闭]

R编写一个从Oracle数据库中提取数据的函数

使用 Oracle 数据库中的 SQL 从 CLOB 数据中提取数据