博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 跨数据库导入大数据
阅读量:5257 次
发布时间:2019-06-14

本文共 4317 字,大约阅读时间需要 14 分钟。

/**      *  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 + "秒");    }

转载于:https://www.cnblogs.com/qixidi/p/10219622.html

你可能感兴趣的文章
Linux中防火墙centos
查看>>
mysql新建用户,用户授权,删除用户,修改密码
查看>>
FancyCoverFlow
查看>>
JS博客
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
ASP.NET WebApi 基于OAuth2.0实现Token签名认证
查看>>
283. Move Zeroes把零放在最后面
查看>>
Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法
查看>>
Python 数据类型
查看>>
S5PV210根文件系统的制作(一)
查看>>
centos下同时启动多个tomcat
查看>>
slab分配器
查看>>
数据清洗
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>
【SVM】libsvm-python
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
Leetcode Balanced Binary Tree
查看>>
Leetcode 92. Reverse Linked List II
查看>>