1. 批量插入数据方式一
插入两万条数据需要一分多种,且每插入一条数据就需要和数据库交互一次
import cn.itcast.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
//批量向数据库表中插入20000条数据
public class Demo03_批量插入数据1 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
//1. 获取连接对象
conn = JDBCUtils.getConnection();
//2. 定义sql语句
String sql = "insert into account(name) values(?)";
//3. 为sql语句赋值
pstmt = conn.prepareStatement(sql);
for(int i=1;i<=20000;i++){
pstmt.setObject(1,"name"+i);
pstmt.execute();//需要执行大概一分多中
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.close(pstmt,conn);
}
}
}
2. 批量插入数据方式二
addBatch( )、executeBatch( )、clearBatch( )
mysql服务器默认是关闭批处理的,我们需要通过一个参数,让mysql开启批处理的支持
?rewriteBatchedStatements=true 写在配置文件url的后面
使用更新的mysql驱动:mysql - connector - java - 5.1.37 - bin.java
import cn.itcast.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
//批量向数据库表中插入20000条数据
public class Demo03_批量插入数据2 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
//1. 获取连接对象
conn = JDBCUtils.getConnection();
//2. 定义sql语句
String sql = "insert into account(name) values(?)";
//3. 为sql语句赋值
pstmt = conn.prepareStatement(sql);
for(int i=1;i<=20000;i++){
pstmt.setObject(1,"name"+i);
//4.1 "攒"sql
pstmt.addBatch();
if(i % 500 == 0){
//4.2 执行batch
pstmt.executeBatch();
//4.3 清空batch
pstmt.clearBatch();
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.close(pstmt,conn);
}
}
}
3. 批量插入数据方式三
终极方案:不允许自动提交数据,手动设置提交数据
import cn.itcast.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
//批量向数据库表中插入20000条数据
public class Demo05_批量插入数据3 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
//1. 获取连接对象
conn = JDBCUtils.getConnection();
//2. 设置不允许自动提交数据
conn.setAutoCommit(false);
//3. 定义sql语句
String sql = "insert into account(name) values(?)";
//4. 为sql语句赋值
pstmt = conn.prepareStatement(sql);
for(int i=1;i<=20000;i++){
pstmt.setObject(1,"name"+i);
//5.1 "攒"sql
pstmt.addBatch();
if(i % 500 == 0){
//5.2 执行batch
pstmt.executeBatch();
//5.3 清空batch
pstmt.clearBatch();
}
}
//6. 提交数据
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.close(pstmt,conn);
}
}
}
版权声明:本文为weixin_52850476原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。