需求是批量新增制定范围编号:例如01232234-01232597
需求很简单,代码也很简单。最后判断不足1000条的数据处理感觉不是很好
代码如下:
//配置的数据库用户名
@Value("${dynamic.datasource.xxx.username}")
private String USERNAME;
//配置的数据库密码
@Value("${dynamic.datasource.xxx.password}")
private String PASSWORD;
//配置的数据库url
@Value("${dynamic.datasource.xxx.url}")
private String URL;
/**
*批量新增编号存入数据库
*/
@Transactional(propagation = Propagation.REQUIRES_NEW)
@Override
@DataSource("xxxdateSource")
public String batchInsertTest(Long startNum, Long endNum) {
Connection conn = null;
PreparedStatement ps = null;
Integer m = 0;
try {
System.out.println("================开始插入模块编号===================");
//连接数据库
conn = JDBCUtils.getConnection(USERNAME,PASSWORD,URL);
//不允许自动提交数据
conn.setAutoCommit(false);
//插入的sql
String sql = "insert into xxx(module_no) values(?)";
ps = conn.prepareStatement(sql);
//范围递增
String numStr = "";
for (Long i = startNum,j = endNum;i <= j;i++){
//转为字符串 前面加0
numStr = "0"+i;
//已经生成的数据数量
m++;
ps.setObject(1,numStr);
ps.addBatch();
//每1000条批量新增一次
if(m%1000 == 0){
//2、执行batch
ps.executeBatch();
//3、清空batch
ps.clearBatch();
}else if(i.equals(j)){
//防止最后不够1000条的数据
//2、执行batch
ps.executeBatch();
//3、清空batch
ps.clearBatch();
}
}
//提交数据
conn.commit();
System.err.println("================结束插入模块编号:"+m+"条===================");
}catch (Exception e){
e.printStackTrace();
}finally {
JDBCUtils.close(conn,ps);
}
return m.toString();
}