您的位置:首页 > 运维架构 > Tomcat

jdbc批量更新数据

2016-03-20 18:20 399 查看
{
boolean add = true;
Connection conn = null;
PreparedStatement pst = null;
String sql = null;
try
{
conn = this.getConnection();
conn.setAutoCommit(false);
//            sql = "MERGE INTO PUSH_NUMBER T1 "
//                    + " USING (SELECT ? AS MOBILE, ? AS PKG_ID FROM DUAL) T2 "
//                    + " ON (T2.MOBILE=T1.USER_NUMBER AND T2.PKG_ID=T1.PKG_ID) " + " WHEN NOT MATCHED THEN "
//                    + " INSERT VALUES(SEQ_PUSH_NUMBER.NEXTVAL,?,?)";
sql = "insert into PUSH_NUMBER(NUMBER_ID,USER_NUMBER,PKG_ID) values(null,?,?)";
pst = conn.prepareStatement(sql);
int num = 0;
for (String mobile : numbers)
{
num++;
pst.setString(1, mobile);
pst.setInt(2, pkgId);
pst.addBatch();
if (num % 30000 == 0)
{
pst.executeBatch();

pst.clearBatch();
}
}
if (num > 0)
{
pst.executeBatch();
}

conn.commit();
}
catch (Exception e)
{
add = false;
logger.error("addNumber was failed!", e);
}
finally
{
if (null != pst)
{
pst.close();
}

if (null != conn)
{
conn.close();
}

}
return add;
}

spring jdbc批量入库

//采用insert into replace 检测手机号码是否存在,存在更新,不存在新增
String sql = "insert into push_token(token,mobile) values(?,?) on DUPLICATE KEY UPDATE token = ?";
List<Object[]> args = new ArrayList<Object[]>();
for (int i = 0; i < tokens.size(); i++) {
Object[] objects = new Object[]{tokens.get(i), mobiles.get(i), tokens.get(i)};
args.add(objects);
}

//3000条提交一次
ArrayList<Object[]> temp = new ArrayList<Object[]>(3000);
List<Object[]> copy = null;
for (Object[] objects : args) {
temp.add(objects);
if (temp.size() >= 3000) {
copy = (List<Object[]>) temp.clone();
temp.clear();
if (temp.isEmpty() && copy.size() >= 3000) {
getJdbcTemplate().batchUpdate(sql, copy);
}
}
}
if (temp.size() > 0) {
copy = (List<Object[]>) temp.clone();
temp.clear();
if (temp.isEmpty() && copy.size() > 0) {
getJdbcTemplate().batchUpdate(sql, copy);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息