Java开发基础-JDBC-核心对象的使用—05

PreparedStatement的批量处理的使用:

对于大量相同操作的数据处理可以使用PreparedStatement。

下面通过简单实例演示如何使用

1.创建测试使用的数据库表 emp_cheri及序列emps_seq

create table emp_cheri (
  empno   number(8) primary key,
  ename   varchar(20),
  job     varchar(20),
  mgr     number(8),
  hiredate  date,
  sal     number(11,2),
  comm    number(11,2),
  deptno    number(8)
);

create sequence emps_seq;
2.编写测试程序
public class TestDay03 {
	
	/**
	 * 批量添加员工
	 * PreparedStatement的批量处理
	 */
	@Test
	public void test3(){
		Connection conn = null;
		try {
		  conn = DBUtil.getConnection();
		  conn.setAutoCommit(false);
		  
		  //批量发送数据的前提是他们的SQL一样
		  String sql = "insert into emp_cheri values ("
				       +"emps_seq.nextval,?,?,?,?,?,?,?)";
		  PreparedStatement ps = conn.prepareStatement(sql);
		  
		  for(int i=1;i<=108;i++){
			  ps.setString(1, "好汉"+i);
			  ps.setString(2, "打劫");
			  ps.setInt(3, 0);
			  ps.setDate(4, null);
			  ps.setDouble(5, 1000.0);
			  ps.setDouble(6, 8000.0);
			  ps.setInt(7, 3);
			  //将本条数据暂存到ps内
			  ps.addBatch();
			  //每隔n次批量发送一次数据
			  if(i%30==0){
				  ps.executeBatch();
				  //清除缓存的数据
				  ps.clearBatch();
			  }
			  
			  //对于余下的数据单独发送一次
			  ps.executeBatch();
			  
			  conn.commit();
		  }
		  
		} catch (SQLException e) {
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			
			e.printStackTrace();
			throw new RuntimeException("批量添加员工失败!");
		}finally{
			DBUtil.close(conn);
		}
	}
}

使用Junit方式运行程序后,查看数据库中数据变化,可以看到数据都已成功插入到对应数据表中


备注:这里有个疑问,观察上面的数据,你发现没有,序列中没有生成 1,留下一个疑问,大家分析下,后面会讲。

猜你喜欢

转载自blog.csdn.net/coder_boy_/article/details/80643219