批处理
应用:
插入/更新/删除 大量数据时,建议使用批处理来做
可以提高效率
使用方法:
- statement.addBatch():
添加批处理,先将数据缓存起来- statement.executeBatch():
执行批处理- statement.clearBatch():
清空缓存
那么,本人现在来通过一个例子来展示下批处理的使用:
假设本人现在要求向dbstudy数据库的users表中插入100条信息
(user编号从1开始计数,名称都暂且用“用户”代替)
user空表
本人再来给出响应的存储用户信息的User类:
package edu.youzg.about_jdbc.model;
public class User {
private String id;
private String name;
public User() {
}
public User(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setNumber(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
那么,本人来给出使用批处理解决问题的代码:
package edu.youzg.about_jdbc.core;
import edu.youzg.about_jdbc.model.User;
import edu.youzg.about_jdbc.utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
public class BatchProcess {
public static void main(String[] args) throws SQLException {
//批处理
//模拟一些数据
ArrayList<User> list = new ArrayList<>();
for (int i = 1; i < 100; i++) {
User user = new User((1000 + i + "").substring(1), "user" + i);
list.add(user);
}
//把集合中的1000个用户插入到数据库中
Connection conn = JDBCUtils.getConnection();
//获取操作对象
String sql="insert into user values(?,?)";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
//当你插入大量数据时,建议你使用批出来
for (User user : list) {
preparedStatement.setString(1,user.getId());
preparedStatement.setString(2,user.getName());
//这行执行sql语句代码,没循环一次,就得执行
// preparedStatement.executeUpdate();
//先把数据缓存起来
preparedStatement.addBatch(); //添加批处理
}
//统一一次性执行
preparedStatement.executeBatch();//执行批处理
//清空批处理
preparedStatement.clearBatch();
//释放资源
JDBCUtils.close(conn,preparedStatement);
}
}
那么,本人现在来展示下运行后生成的表内容:
运行后 user表
看了上述的代码,相信同学们也发现了:
批处理运用了缓冲区的思想
那么,本篇博文的知识点在这里就讲解完毕了。
(请观看本人博文 —— 《JDBC 专栏总集篇》)