javaweb学习笔记(十六):JDBC(2)

版权声明:转载请注明出处: 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);
	}
}

结果:

 

猜你喜欢

转载自blog.csdn.net/qq_34774655/article/details/83758030