• java实现数据库之间批量插入数据


    package comnf147Package;
    
    import java.sql.*;
    
    public class DateMigrationLagou {
        
        //连接SQLite
        private Connection getSqlite() throws Exception {
            Class.forName("org.sqlite.JDBC");
            return DriverManager.getConnection("jdbc:sqlite:E:\data\lagou.db");
        }
    
        //连接MariaDB
        private Connection getMariaDb() throws Exception {
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection("jdbc:mysql://localhost:3306/lagouDB?rewriteBatchedStatements=true", "root", "666666");
        }
    
        //释放资源
        private void release(Connection coon, Statement st, ResultSet rs) {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (st != null) {
                try {
                    st.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (coon != null) {
                try {
                    coon.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public void OperatingControl() {
    
            //从SQLite中取数据
            Connection SQliteConn = null;
            Statement SQliteSt = null;
            ResultSet SQliteRS = null;
    
            //添加到MaiiaDb
            Connection MariaDbConn = null;
            PreparedStatement MariaDbPs = null;
    
    
            try {
                //获取数据
                SQliteConn = this.getSqlite();
                SQliteSt = SQliteConn.createStatement();
                SQliteRS = SQliteSt.executeQuery("select * from lagou_position");
    
                //添加数据
                MariaDbConn = this.getMariaDb();
                MariaDbPs = MariaDbConn.prepareStatement("insert into lagou_position values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
    
                // 关闭事务自动提交 ,这一行必须加上,否则每插入一条数据会向log插入一条日志
                MariaDbConn.setAutoCommit(false);
    
                int i = 0;
                //计时开始
                long startime = System.currentTimeMillis();
                //设置批量处理的数量
    
                while (SQliteRS.next()) {
                    for (int j = 1; j < 20; j++) {
                        MariaDbPs.setObject(j, SQliteRS.getObject(j));
                    }
                    MariaDbPs.addBatch();
                    //把若干sql语句装载到一起,然后一次送到数据库执行,执行需要很短的时间
                    // 每 10000 条,向数据库发送一次执行请求
                    if (++i % 10000 == 0) {
                        MariaDbPs.executeBatch();
                    }
                }
                //执行批量处理语句;
                MariaDbPs.executeBatch();
                //// 提交事务
                MariaDbConn.commit();
    
                //结束时间
                long stoptime = System.currentTimeMillis();
                //输出结果
                System.out.println("总数据" + i);
                System.out.println("插入用时" + (stoptime - startime) / 1000.0 + " 秒 ");
            } catch (Exception e) {
                try {
                    if (MariaDbConn != null) {
                        MariaDbConn.rollback();
                    }
                } catch (SQLException e1) {
                }
            } finally {
                this.release(SQliteConn, SQliteSt, SQliteRS);
                this.release(MariaDbConn, MariaDbPs, null);
            }
        }
    
    }
        public static void main(String[] args) {
    
            //调用方式
            DateMigrationLagou dateMigrationLagou = new  DateMigrationLagou();
            dateMigrationLagou.OperatingControl();
        }
        
  • 相关阅读:
    单例模式
    分析GC日志
    JVM运行时参数
    JVM监控及诊断工具-GUI篇
    JVM监控及诊断工具-命令行篇
    性能监控与调优(概述篇)
    再谈类的加载器
    类的加载过程(类的生命周期)详解
    字节码指令集
    class文件结构
  • 原文地址:https://www.cnblogs.com/nongzihong/p/9998979.html
Copyright © 2020-2023  润新知