Java JDBC 进行批量跟新操作

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


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mtj66

看心情

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值