JDBC-批量处理数据(练习)
Posted Vodka~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC-批量处理数据(练习)相关的知识,希望对你有一定的参考价值。
package PreparedStatementCURD;
import Instrument.GetConnection;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @description 批量插入数据
* @author Vodka
* @date 2021/07//0:00
*/
/*
*
* 方式二:
* */
public class BatchDataProcessing {
public static void main(String [] args){
BatchInsertTwo();
}
// 批量插入的方式一: 使用PreparedStatement
public static void BatchInsertOne(){
try {
Connection conn = GetConnection.getConnection();
String sql = "Insert into Users (id, UName, UAge) values(?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
for (int index =0 ; index < 20000; ++index ){
//先试用Statement语句测试
ps.setObject(1,index+1);
ps.setObject(2,"User"+index);
ps.setObject(3,2*index);
ps.execute();
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
// 批量插入的方式二:1. addBatch() 2.executeBatch() 3.clearBatch() ,大大地提升了处理速度
// mysql是默认关闭数据批量处理的,需要在配置文件添加参数,让mysql支持批处理。 ?rewriteBatchedStatements=true,
// 写在配置文件的url后面
public static void BatchInsertTwo(){
Connection conn = null;
PreparedStatement ps = null;
try {
conn = GetConnection.getConnection();
//记录插入开始的时间
long StartTime = System.currentTimeMillis();
//设置不允许自动提交数据 。 数据库的DML操作设置是默认提交,这样就不能数据出错时回滚了
conn.setAutoCommit(false);
String sql = "Insert into Users (id,UName,UAge) values(?,?,?)";
ps = conn.prepareStatement(sql);
int temp = 0; //用来标记累积sql语句的多少
for(int index = 100001 ; index < 1000000; ++index){
ps.setObject(1,index );
ps.setObject(2,"User"+index);
ps.setObject(3,index*2);
//1.累积SQL
ps.addBatch();
temp++;
//2.假设累积到500条,就执行批量插入
if(temp % 500 == 0){
ps.executeBatch();
temp = 0;
}
//3.清空上一批累积的Batch
ps.clearBatch();
}
//记录插入完成后的时间
long EndTime = System.currentTimeMillis();
System.out.println("批量插入数据所用的时间:"+ (EndTime - StartTime) +"ms");
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
以上是关于JDBC-批量处理数据(练习)的主要内容,如果未能解决你的问题,请参考以下文章