向mysql數據庫插入大量數據

1.java

package com.zy.demo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
import java.util.concurrent.locks.ReentrantLock;

public class BatchInsert extends Thread {

    //定義鎖對象
    private final ReentrantLock lock=new ReentrantLock();

    public void run() {
        String url = "jdbc:mysql://192.168.0.199/batch_insert";
        String name = "com.mysql.jdbc.Driver";
        String user = "root";
        String password = "123456";
        Connection conn = null;
        try {
            Class.forName(name);
            conn = DriverManager.getConnection(url, user, password);//獲取鏈接
            conn.setAutoCommit(false);//關閉自動提交,否則conn.commit()運行到這句會報錯
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        // 開始時間
        Long begin = new Date().getTime();
        // sql前綴
        String prefix = "INSERT INTO stu (id,name,lang) VALUES ";
        try {
            // 保存sql後綴
            StringBuffer suffix = new StringBuffer();
            // 設置事務爲非自動提交
            conn.setAutoCommit(false);
            // 比起st,pst會更好些
            PreparedStatement pst = (PreparedStatement) conn.prepareStatement("");//準備執行語句
            // 外層循環,總提交事務次數
            suffix = new StringBuffer();
            for (int i = 1; i <= 10; i++) {
                // 第j次提交步長
                for (int j = 1; j <= 100; j++) {
                    // 構建SQL後綴
                    for (int k = 1; k <= 100; k++) {
                        suffix.append("('a" + i + "','b" + j + "','c" + k + "'),");
                    }
                }
            }
            // 構建完整SQL
            String sql = prefix + suffix.substring(0, suffix.length() - 1);
            // 添加執行SQL
            pst.addBatch(sql);
            // 執行操做
            pst.executeBatch();
            // 提交事務
            conn.commit();
            // 清空上一次添加的數據
            suffix = new StringBuffer();
            // 頭等鏈接
            pst.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        // 結束時間
        Long end = new Date().getTime();
        // 耗時
        System.out.println("100萬條數據插入花費時間 : " + (end - begin) / 1000 + " s"+"  插入完成");
    }
}

 

2.mysql

package com.zy.demo;

public class BatchInsertTest {

    public static void main(String[] args) {
        for (int i = 1; i <=10; i++) {
            new BatchInsert().start();
        }
    }
}
相關文章
相關標籤/搜索