Java JDBC 进行批量跟新操作

来源:互联网 发布:java求质数 编辑:程序博客网 时间:2024/06/17 18:09

//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);
}


}

0 0