关于MYSQL批量INSERT数据(200W)

1.根据自己的电脑开线程数量越多越快。

2.

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class TestDataBase2 {

public static void main(String[] args) {

    Connection conn = null;
    try {
        conn = DBUtil.getConnection();
    } catch (SQLException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    String sql = "insert into ad_log_app(adid, vTime, userId, vValue,tradeFlag,lmCode) values (?,NOW(),?,?,?,?)";

    try {
        
        PreparedStatement prep = conn.prepareStatement(sql);
        conn.setAutoCommit(false);
        long start = System.currentTimeMillis();
        for(int i = 0; i < 200; i++){
            for (int j = 0; j < 10000; j++) {
                prep.setInt(1, 81+j);
                //prep.setDate(2,date);
                prep.setInt(2, 1001267);
                prep.setDouble(3, 0.01);
                prep.setInt(4, 0);
                prep.setInt(5, 0);
                // 将预处理添加到批中
                prep.addBatch();
            }// 预处理批量执行
            prep.executeBatch();
            prep.clearBatch();
            conn.commit();
        }
            

        long end = System.currentTimeMillis();
        System.out.print("total: ");
        System.out.println(end - start);

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        DBUtil.close(conn);
    }
}
}

DBUTil

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

/**
 * 封装 数据库的连接过程
 *   可以使用连接数据库的过程被重用
 *    
 */
public class DBUtil {
    //声明属性
    private static String driver;
    private static String url;
    private static String user;
    private static String pwd;
    //利用静态代码块,从配置文件中加载属性值
    static{
        Properties config = new Properties();
        try {
            config.load(DBUtil.class.getClassLoader().getResourceAsStream("ssgm.properties"));
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("配置文件读取错误");
        } 
        //初始化属性
        //将key对应的value取出来作为jdbc属性的值
        driver=config.getProperty("jdbc.driverclass");
        url=config.getProperty("jdbc.url");
        user = config.getProperty("jdbc.username");
        pwd = config.getProperty("jdbc.password");
    }
    
    /**
     * 封装数据库的连接过程
     *  封装: 数据库驱动注册和连接过程
     *  返回值是Connection 代表数据库的连接结果
     *  是Connection类型对象。
     */
    public static Connection getConnection()
        throws SQLException {
        try {
            Class.forName(driver);//需要处理异常
            Connection conn = DriverManager
                        .getConnection(url, user, pwd);
            return conn;//返回建立的连接对象
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            throw new SQLException("木有找到驱动",e);
        }
    }
    /**
     * 封装 关闭数据库连接的过程
     * @param conn 被关闭的连接对象
     */
    public static void close(Connection conn){
        if(conn!=null){//避免了空指针异常
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
原文地址:https://www.cnblogs.com/AbrahamBill/p/5257969.html