版权声明:转载请注明出处: https://blog.csdn.net/qq_34774655/article/details/83758030
批处理
当需要向数据库发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率。
实现批处理有两种方式:
①Statement.addBatch(sql) :添加批处理命令。
优点:可以向数据库发送多条不同的SQL语句。
缺点:SQL语句没有预编译。当向数据库发送多条语句相同,但仅参数不同的SQL语句时,需重复写上很多条SQL语句。
②PreparedStatement.addBatch()
优点:发送的是预编译后的SQL语句,执行效率高。
缺点:只能应用在SQL语句相同,但参数不同的批处理中。因此此种形式的批处理经常用于在同一个表中批量插入数据,或批量更新表的数据。
执行批处理SQL语句
executeBatch()方法:执行批处理命令。
clearBatch()方法:清除批处理命令。
例:
student.java :student实体
package entity;
public class Student {
private String name;
private int age;
public Student() {
super();
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
StuDao.java:封装所有与数据库的操作
package day1105;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import entity.Student;
import util.jdbcUtil;
public class StuDao {
private Connection conn=null;
private PreparedStatement stmt=null;
private ResultSet rs=null;
public void save(List<Student> list) {
try {
//获取连接
conn=jdbcUtil.getConnection();
//SQL语句
String sql="INSERT INTO student(NAME,age) VALUES(?,?)";
//预编译SQL语句
stmt=conn.prepareStatement(sql);
for(int i=0;i<list.size();i++) {
Student stu=list.get(i);
stmt.setString(1, stu.getName());
stmt.setInt(2, stu.getAge());
//添加批处理
stmt.addBatch();
//每5条执行一次批处理
if(i%5==0) {
//批量执行,批量处理
stmt.executeBatch();
stmt.clearBatch();
}
}
stmt.executeBatch();
stmt.clearBatch();
}catch(Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}finally {
jdbcUtil.close(conn, stmt,rs);
}
}
}
TestBatch.java:测试批处理
package day1105;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import entity.Student;
public class TestBatch {
@Test
//测试批处理
public void testBatch()throws Exception{
List<Student> list=new ArrayList<Student>();
//模拟数据
for(int i=1;i<50;i++) {
Student stu=new Student();
stu.setName("xiaohua"+i);
stu.setAge(i);
list.add(stu);
}
//保存
StuDao dao=new StuDao();
dao.save(list);
}
}
结果: