spring JdbcTemplate批量更新

spring JdbcTemplate 的批量更新:

1、JdbcTemplate batchUpdate(new String[]{});

一次执行多个sql语句;

2、

final List tmpList = ....;
int count = JdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter(){
			public int getBatchSize() {
				return tmpList.size();
			}
			public void setValues(PreparedStatement ps, int i)throws SQLException {
				ps.setString(1, tmpList .get(i).getName());
				ps.setString(2,tmpList .get(i).getCode());
				ps.setString(3,tmpList .get(i).getDate());
				ps.setInt(4,tmpList .get(i).getRank());
			}}).length;

 此方法可以批量,但是在spring里面是一条一条执行的,大批数据执行效率不佳

3、写PreparedStatement 进行批量

final List<TmpBean> tmpBeanList=...;
final String sql = ....;
int[] count = (int[]) this.pushJdbcTemplate.execute(sql, new PreparedStatementCallback(){
			public Object doInPreparedStatement(PreparedStatement ps)throws SQLException, DataAccessException {
				int length = stockRanList.size();
				ps.getConnection().setAutoCommit(false);
				for(int i=0;i<length;i++){
					ps.setString(1, tmpBeanList.get(i).getName());
					ps.setString(2,tmpBeanList.get(i).getCode());
					ps.setString(3,tmpBeanList.get(i).getDate());
					ps.setInt(4,tmpBeanList.get(i).getRank());
					ps.addBatch();
				}
				Object o = ps.executeBatch();
				ps.getConnection().commit();
				ps.getConnection().setAutoCommit(true);
                             //如果用<aop:config>  来控制事务,需要把上一行注掉,否则会报错
				return	o;
			}});

相关推荐