您的位置:首页 > 编程语言 > Java开发

Java-mysql-批量插入

2017-08-24 18:30 316 查看
我暂时发现的批量插入有两种:
一、

INSERT INTO TABLE (col1, col2, col3)
VALUES
(val1, val2, val3),
(val1, val2, val3),
(val1, val2, val3)

二、
INSERT INTO TABLE (col1, col2, col3) VALUES (val1, val2, val3);
INSERT INTO TABLE (col1, col2, col3) VALUES (val1, val2, val3);
INSERT INTO TABLE (col1, col2, col3) VALUES (val1, val2, val3);

我只测试了1边,数据量为100w

方法一:18450ms(19秒)

方法二:493399ms(8-9分钟)

下面贴上代码

package com.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.UUID;

public class InsertTest {

private final static String DRIVER = "com.mysql.jdbc.Driver";
private final static String URL = "jdbc:mysql://192.168.164.129:3306/test";
private final static String USERNAME = "";
private final static String PASSWORD = "";
private static Connection conn = null;

/**
* SQL链接
*
* @return
*/
private static Connection getConnection() {
if (conn == null) {
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
return conn;
}

/**
* 批量插入
*
* SQL语句:
* INSERT INTO TABLE (col1, col2, col3)
* VALUES
* (val1, val2, val3),
* (val1, val2, val3),
* (val1, val2, val3)
*
* @throws SQLException
*/
public static void insert_1() throws SQLException {
Long startTime = System.currentTimeMillis();
// SQL前缀
String prefixSQL = "INSERT INTO test_table_3 (uuid) VALUES";
// SQL后缀
StringBuffer suffixSQL = new StringBuffer();
// SQL链接
Connection conn = getConnection();
// 非自动提交
conn.setAutoCommit(false);
// SQL预编译处理对象
PreparedStatement pst = conn.prepareStatement("");
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 10000; j++) {
// 字符类型,记得加''
suffixSQL.append("('" + UUID.randomUUID().toString() + "'),");
}
// SQL拼接
String sql = prefixSQL + suffixSQL.substring(0, suffixSQL.length() - 1);
pst.addBatch(sql);
pst.executeBatch();
conn.commit();
suffixSQL = new StringBuffer();
}
pst.close();
conn.close();
Long endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
}

/**
* 批量插入
*
* SQL语句:
* INSERT INTO TABLE (col1, col2, col3) VALUES (val1, val2, val3);
* INSERT INTO TABLE (col1, col2, col3) VALUES (val1, val2, val3);
* INSERT INTO TABLE (col1, col2, col3) VALUES (val1, val2, val3);
*
* @throws SQLException
*/
public static void insert_2() throws SQLException {
Long startTime = System.currentTimeMillis();
// SQL
String sql = "INSERT INTO test_table_2 (uuid) VALUES(?)";
// SQL链接
Connection conn = getConnection();
// 非自动提交
conn.setAutoCommit(false);
// SQL预编译处理对象
PreparedStatement pst = conn.prepareStatement(sql);
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 10000; j++) {
pst.setString(1, UUID.randomUUID().toString());
pst.addBatch();
}
pst.executeBatch();
conn.commit();
}
pst.close();
conn.close();
Long endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
}

public static void main(String[] args) throws SQLException {
insert_1();
}
}


我参考的博客:http://blog.csdn.net/frinder/article/details/38830723。

暂时先这样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: