日期:2014-05-16  浏览次数:20498 次

Spring JdbcTemplate 批量插入或更新操作
Spring JdbcTemplate 批量插入或更新操作


用 JdbcTemplate 进行批量插入或更新操作

方法一:

代码只是测试用的一个小例子。

public int insertContractAch(List list) throws DataAccessException { 
    final List temList = list; 
    String sql = "insert into contract_ach_t " + 
            " values(?,to_date(?,'yyyy-mm-dd'),?,?) "; 
    try{ 
        int[] ii = this.getJdbcTemplate().batchUpdate(sql, new MyBatchPreparedStatementSetter(temList)); 
        return ii.length; 
    }catch (org.springframework.dao.DataAccessException e) { 
        e.printStackTrace(); 
        throw new DataAccessException(e.getMessage()); 
    } 

 
private class MyBatchPreparedStatementSetter implements BatchPreparedStatementSetter{ 
    final List temList; 
     
    public MyBatchPreparedStatementSetter(List list){ 
        temList = list; 
    } 
    public int getBatchSize() { 
        return temList.size(); 
    } 
 
    public void setValues(PreparedStatement ps, int i) 
            throws SQLException { 
        ContractAchVO contractAchVO = (ContractAchVO)temList.get(i); 
        ps.setString(1, contractAchVO.getContractCode()); 
        ps.setString(2, contractAchVO.getCreateDate()); 
        ps.setString(3, contractAchVO.getEmployeeId()); 
        ps.setString(4, contractAchVO.getPercent()); 
    } 
}

方法二:

//插入很多书(批量插入用法)
public void insertBooks(List<Book> book)
{
  final List<Book> tempBook=book;
  String sql="insert into book(name,pbYear) values(?,?)";
  jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter()
  {
   public void setValues(PreparedStatement ps,int i)throws SQLException
   {
    String name=tempBook.get(i).getName();
    int pbYear=tempBook.get(i).getPbYear();
    ps.setString(1, name);
    ps.setInt(2, pbYear);
   }
   public int getBatchSize()
   {
    return tempBook.size();
   }
  });
  
}