java 跨数据库导入大数据


/**
* java程序跨服务器跨数据库批量导入导出百万级数据
* @param args
* @throws Exception
*/
public static void main(String args[]) throws Exception {
ResultSet rs = null;
Statement s1 = null;
Statement s2 = null;
Connection cn1 = null;
Connection cn2 = null;
long startTime = 0;// 开始时间
long endTime = 0; // 结束时间
int count = 1; // 计数
int onerun = 0; // 执行的最大数
int datanum = 0; // 总条数
int num = 0; // 取整最大数据 try {
startTime = System.currentTimeMillis();
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Class.forName("oracle.jdbc.driver.OracleDriver");
cn1 = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.16:1521:oracleDb", "test", "test2012");
cn2 = DriverManager.getConnection("jdbc:sqlserver://192.168.1.18:1433;databaseName=dbsql;user=sa;password=db2012");
// 插入oracle数据库时使用事务批量提交
cn1.setAutoCommit(false);
if (cn2 != null) {
//ORACLE 数据库
s1 = cn1.createStatement();
//sqlserver 数据库
s2 = cn2.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); // 先查询sqlserver数据源表,获取总数据条数
rs = s2.executeQuery("select count(vcBusiFlowNo) from tb_His2_Ask_Pay_Fee");
if (rs.next()) {
datanum = rs.getInt(1);
}
System.out.println("总记录数:" + datanum + "条");
onerun = 10000;// 执行的最大数
// 计算出总条数符合每批10000的数量是多少
num = datanum / onerun * onerun;
s2.setMaxRows(datanum);
s2.setFetchSize(onerun);// 每批执行的数据条数
//查询
rs = s2.executeQuery(
"select nSerialNo,vcBusiFlowNo,vcBusiTypeID,vcBusiNumber,vcUserName,vcUserAddress,vcUserLinkTel,nPayFee,vcBusiMonth,vcComments,dOperDate,vcOperID,vcDealerID,vcAreaCode,vcDealerGradeID from tb_His2_Ask_Pay_Fee");
while (rs.next()) {
//边查询变插入
s1.addBatch(
"insert into tb_His2_Ask_Pay_Fee(nSerialNo,vcBusiFlowNo,vcBusiTypeID,vcBusiNumber,vcUserName,vcUserAddress,vcUserLinkTel,nPayFee,vcBusiMonth,vcComments,dOperDate,vcOperID,vcDealerID,vcAreaCode,vcDealerGradeID) values('"
+ rs.getString("nSerialNo") + "','" + rs.getString("vcBusiFlowNo") + "','"
+ rs.getString("vcBusiTypeID") + "','" + rs.getString("vcBusiNumber") + "','"
+ rs.getString("vcUserName") + "','" + rs.getString("vcUserAddress") + "','"
+ rs.getString("vcUserLinkTel") + "','" + rs.getString("nPayFee") + "','"
+ rs.getString("vcBusiMonth") + "','" + rs.getString("vcComments") + "','"
+ rs.getString("dOperDate") + "','" + rs.getString("vcOperID") + "','"
+ rs.getString("vcDealerID") + "','" + rs.getString("vcAreaCode") + "','"
+ rs.getString("vcDealerGradeID") + "')");
// 10000取整后剩余的小数据量就顺序插入
if (count > num) {
//批量执行
s1.executeBatch();
//提交事务
cn1.commit();
//清空
s1.clearBatch();
} else {
// 数据够批次的就按批量插入
if (count % onerun == 0) {
// 10000条一批插入
s1.executeBatch();
cn1.commit();
s1.clearBatch();
}
}
count++;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
rs.close();
s2.close();
s1.close();
cn2.close();
cn1.close();
}
endTime = System.currentTimeMillis();
System.out.println("成功移植数据:" + (count - 1) + "条,耗时" + (endTime - startTime) / 1000 + "秒");
}

java 跨数据库导入大数据的更多相关文章

  1. MYSQL数据库导入大数据量sql文件失败的解决方案

    1.在讨论这个问题之前首先介绍一下什么是"大数据量sql文件". 导出sql文件.选择数据库-----右击选择"转储SQL文件"-----选择"结构和 ...

  2. Sqlserver 2005 跨数据库 导入数据

    --Sqlserver 2005 跨数据库 导入数据:--SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/O ...

  3. SQL跨数据库复制表数据

    SQL跨数据库复制表数据   不同服务器数据库之间的数据操作 不同数据库之间复制表的数据的方法: 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库.. ...

  4. sqlcmd导入大数据文件

    sqlcmd导入大数据文件 SQLCMD 允许在Windows命令窗中通过命令行提示符运行脚本. 语法如下: sqlcmd  [  { { -U <login id> [ -P <p ...

  5. c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)

    这篇文章主要介绍了c#几种数据库的大数据批量插入(SqlServer.Oracle.SQLite和MySql),需要的朋友可以了解一下. 在之前只知道SqlServer支持数据批量插入,殊不知道Ora ...

  6. 黑马基础阶段测试题:创建一个存储字符串的集合list,向list中添加以下字符串:”C++”、”Java”、” Python”、”大数据与云计算”。遍历集合,将长度小于5的字符串从集合中删除,删除成功后,打印集合中的所有元素

    package com.swift; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; ...

  7. Java数据库——处理大数据对象

    处理大数据对象 CLOB中可以存储海量文字 BLOB中可以存储海量二进制数据 如果程序中要想处理这样的大对象操作,则必须使用PreparedStatement完成,所有的内容要通过IO流的方式从大文本 ...

  8. MySQL数据库解决大数据量存储问题

    转载自:https://www.cnblogs.com/ryanzheng/p/8334915.html 提问:如何设计或优化千万级别的大表?此外无其他信息,个人觉得这个话题有点范,就只好简单说下该如 ...

  9. Eclipse中java向数据库中添加数据,更新数据,删除数据

    前面详细写过如何连接数据库的具体操作,下面介绍向数据库中添加数据. 注意事项:如果参考下面代码,需要 改包名,数据库名,数据库账号,密码,和数据表(数据表里面的信息) package com.ning ...

随机推荐

  1. 解决android studio引用远程仓库下载慢(转)

    解决android studio引用远程仓库下载慢(JCenter下载慢) 第一种方法 使用开源中国的maven库 阿里云的(速度飞快):http://maven.aliyun.com/nexus/c ...

  2. HDU 3080 The plan of city rebuild(除点最小生成树)

    题意  一个城市原来有l个村庄 e1条道路  又添加了n个村庄 e2条道路  后来后销毁了m个村庄  与m相连的道路也销毁了  求使全部未销毁村庄相互连通最小花费  不能连通输出what a pity ...

  3. SUSE10 SP4源码升级Python到2.6.6

    1.安装依赖包(CentOS可采用yum) zypper in gcc gcc-c++ openssl-devel-32bit openssl-devel readline-devel readlin ...

  4. 浅谈HTTP缓存以及后端,前端如何具体实现HTTP缓存

    <浅谈HTPP缓存>原版: https://juejin.im/post/5bdeabbbe51d4505466cd741?utm_source=gold_browser_extensio ...

  5. Kotlin——中级篇(三):可见性修饰符详解

    在Kotlin中,不管是类,对象,接口,构造函数,函数,属性及其设置器都具有可见性修饰符.Kotlin中的可见性修饰符共四种.即public.protected.private.internal.在不 ...

  6. EasyNVR智能云终端硬件与EasyNVR解决方案软件综合对比

    背景分析 互联网视频直播越来越成为当前视频直播的大势,对于传统的安防监控,一般都是局限于内网,无法成批量上云台.传统的海康和大华的平台虽然可以通过自身私有协议上云平台 集总管控,但是往往只是支持自身的 ...

  7. 巨蟒python全栈开发linux之centos1

    1.linux服务器介绍 2.linux介绍 3.linux命令学习 linux默认有一个超级用户root,就是linux的皇帝 注意:我的用户名是s18,密码是centos 我们输入密码,点击解锁( ...

  8. UI中各种手势的使用点击,捏合,清扫,旋转,平移,边缘移动,长按

    #import "RootViewController.h" @interface RootViewController (){    UIImageView *imageView ...

  9. 分界线<hr/>

    <hr align="center" noshade="noshade" width="90px" color="#1DAB ...

  10. [转载]使用iscroll.js-tab左右滑动导航--tab点击无效果

     转载自:http://blog.csdn.net/zuoyiran520081/article/details/77369421 最近在页面中用iscroll.js,但是但是有跳转,用a标签的hre ...