zoukankan      html  css  js  c++  java
  • Java实现数据批量导入mysql数据库

    本文完全照搬别人的。

    原文标题:Java实现数据批量导入数据库(优化速度-2种方法)

    原文地址:https://blog.csdn.net/qy20115549/article/details/52699724

     原文看着更清晰,请移步原文查看。

    连接数据库

    package db;
    import java.sql.Connection;
    import java.sql.DriverManager;
    /*   
     *  合肥工业大学 管理学院 qianyang 1563178220@qq.com
     */
    public class MySQLConnections {
        private String driver = "";
        private String dbURL = "";
        private String user = "";
        private String password = "";
        private static MySQLConnections connection = null;
    
        private MySQLConnections() throws Exception {
            driver = "com.mysql.jdbc.Driver";
            dbURL = "jdbc:mysql://127.0.0.1:3306/test";
            user = "root";
            password = "112233";
            System.out.println("dbURL:" + dbURL);
        }
    
        public static Connection getConnection() {
            Connection conn = null;
            if (connection == null) {
                try {
                    connection = new MySQLConnections();
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                }
            }
            try {
                Class.forName(connection.driver);
                conn = DriverManager.getConnection(connection.dbURL,
                        connection.user, connection.password);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return conn;
        }
    }

    批量处理的两种方式

    第一种方式,是每5000条记录放入数据库,一次。也就是每次提交的记录都有5000条,当然最后一次可能不是。另外,一种方式,是使用默认的提交方式。两者的处理速度都不错。50000条记录,大概15秒左右。

    package db;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    /*   
     *  合肥工业大学 管理学院 qianyang 1563178220@qq.com
     */
    public class MySQLUpdate {
        static Connection con = MySQLConnections.getConnection();
        static PreparedStatement stmt = null;
        public static int executeInsert() throws SQLException {
            int i = 0;  
            //设置批量处理的数量             
            int batchSize = 5000;       
            stmt = con.prepareStatement("insert into mysqltest (id,name) "
                    + "values (?,?)");
            // 关闭事务自动提交 ,这一行必须加上
            con.setAutoCommit(false);
            for (int j = 0; j < 50005; j++){
                ++i;
                stmt.setInt(1, j);  
                stmt.setString(2, "name");  
                stmt.addBatch();  
                if ( i % batchSize == 0 ) {
                    stmt.executeBatch();
                    con.commit();
                }
            }
            if ( i % batchSize != 0 ) {
                stmt.executeBatch();
                con.commit();
            }
            return i;
        }
    
        public static  void executeInsert2() throws SQLException {
            // 关闭事务自动提交 ,这一行必须加上  
            con.setAutoCommit(false);
            stmt = con.prepareStatement("insert into mysqltest1 (id,name) "
                    + "values (?,?)");
            for (int j = 0; j < 50002; j++){
                stmt.setInt(1, j);  
                stmt.setString(2, "name");
                stmt.addBatch(); 
            }
            stmt.executeBatch();
            con.commit();
            stmt.close();   
            con.close();
        }
    
    }

    main方法

    package main;
    import java.sql.SQLException;
    import db.MySQLUpdate;
    /*   
     *  合肥工业大学 管理学院 qianyang 1563178220@qq.com
     */
    public class Test {
    
        public static void main(String[] args) throws SQLException {
    //      long begin1 = System.currentTimeMillis(); 
    //      MySQLUpdate.executeInsert();
    //      long end1 = System.currentTimeMillis();  
    //      System.out.println("程序运行时间为:"+(end1-begin1));
    
            long begin2 = System.currentTimeMillis(); 
            MySQLUpdate.executeInsert1();
            long end2 = System.currentTimeMillis();  
            System.out.println("程序运行时间为:"+(end2-begin2));
        }
    
    }
  • 相关阅读:
    Java
    一个web项目web.xml的配置中<context-param>配置作用
    JVM之几种垃圾收集器简单介绍
    JVM日志和参数的理解
    Java GC日志查看
    Java-性能调优-理解GC日志
    理解Java的GC日志
    tomcat打印GC日志
    快速解读GC日志
    Java 堆内存
  • 原文地址:https://www.cnblogs.com/Tpf386/p/11851002.html
Copyright © 2011-2022 走看看