//Java JDBC 进行批量跟新操作
1. 先定义一个DAO接口专门为某个model数据集的增删改查进行服务。
public interface IAdStatDAO {
// 可以用于增删改
void updateBatch(List<AdStat> adStats);
}
2. // 对数据进行批量的更新
public class AdStatDAOImpl implements IAdStatDAO {
@Override
public void updateBatch(List<AdStat> adStats) {
JDBCHelper jdbcHelper = JDBCHelper.getInstance();
// 2.1 区分开来哪些是要插入的,哪些是要更新的
List<AdStat> insertAdStats = new ArrayList<AdStat>();
List<AdStat> updateAdStats = new ArrayList<AdStat>();
//2.2 先进行查询语句
String selectSQL = "SELECT count(*) "
+ "FROM ad_stat "
+ "WHERE date=? "
+ "AND province=? "
+ "AND city=? "
+ "AND ad_id=?";
//2.3 对数据进行查询根据结果进行分别得更新操作。
for(AdStat adStat : adStats) {
// 此处必须是final修饰
final AdStatQueryResult queryResult = new AdStatQueryResult();
Object[] params = new Object[]{adStat.getDate(),
adStat.getProvince(),
adStat.getCity(),
adStat.getAdid()};
//2.4 进行查询操作
jdbcHelper.executeQuery(selectSQL, params, new JDBCHelper.QueryCallback() {
@Override
public void process(ResultSet rs) throws Exception {
if(rs.next()) {
int count = rs.getInt(1);
queryResult.setCount(count);
}
}
});
int count = queryResult.getCount();
//2.5 分别放到对应的数组中
if(count > 0) {
updateAdStats.add(adStat);
} else {
insertAdStats.add(adStat);
}
}
// 对于需要插入的数据,执行批量插入操作
String insertSQL = "INSERT INTO ad_stat VALUES(?,?,?,?,?)";
List<Object[]> insertParamsList = new ArrayList<Object[]>();
for(AdStat adStat : insertAdStats) {
Object[] params = new Object[]{adStat.getDate(),
adStat.getProvince(),
adStat.getCity(),
adStat.getAdid(),
adStat.getClickCount()};
insertParamsList.add(params);
}
jdbcHelper.executeBatch(insertSQL, insertParamsList);
// 对于需要更新的数据,执行批量更新操作
String updateSQL = "UPDATE ad_stat SET click_count=? "
+ "FROM ad_stat "
+ "WHERE date=? "
+ "AND province=? "
+ "AND city=? "
+ "AND ad_id=?";
List<Object[]> updateParamsList = new ArrayList<Object[]>();
for(AdStat adStat : updateAdStats) {
Object[] params = new Object[]{adStat.getClickCount(),
adStat.getDate(),
adStat.getProvince(),
adStat.getCity(),
adStat.getAdid()};
updateParamsList.add(params);
}
// jin
jdbcHelper.executeBatch(updateSQL, updateParamsList);
}
}