批量修改、删除操作修改为批处理 废弃使用in语法

This commit is contained in:
default
2018-10-09 14:45:58 +08:00
parent 94f6853323
commit ac756d0149
2 changed files with 28 additions and 34 deletions

View File

@@ -151,12 +151,13 @@ public class SyncSlaveToMasterThread implements Runnable{
@Override
public boolean run() throws SQLException {
List<Integer> updateIds = new ArrayList<Integer>();
StringBuffer handleStr = new StringBuffer();
List<Record> deleteRecords=new ArrayList<Record>();
StringBuilder handleStr=new StringBuilder();
for (int i = 0; i < datas.size(); i++) {
updateIds.add(datas.get(i).getInt("target_id"));
if (i == 0) {
if(i==0) {
handleStr.append("?");
} else {
}else {
handleStr.append(",?");
}
}
@@ -182,22 +183,18 @@ public class SyncSlaveToMasterThread implements Runnable{
}
logger.info("分库同步主库修改数据任务完成");
} else if (record.getInt("event") == 3) {
for (int i = 0; i < datas.size(); i++) {
Record deleteRecord=new Record();
deleteRecord.set(record.getStr("id_name"), datas.get(i).getInt("target_id"));
//如果是针对 event_record_library 下两行数据使用 不是则仅仅赋值 无意义
deleteRecord.set("old_id", datas.get(i).getInt("target_id"));
deleteRecord.set("db_id", -1);
deleteRecords.add(deleteRecord);
}
if(record.getStr("table_name").equals("event_record_library")) {
updateIds.clear();
handleStr.delete(0,handleStr.length());
for (int i = 0; i < datas.size(); i++) {
updateIds.add(datas.get(i).getInt("target_id"));
updateIds.add(syncDbInfo.getInt("id"));
if (i == 0) {
handleStr.append("(?,?)");
} else {
handleStr.append(",(?,?)");
}
}
Db.use("masterDataSource").update("delete from event_record_library where (old_id,db_id) in ("+handleStr+")",updateIds.toArray());
Db.use("masterDataSource").batch("delete from event_record_library where old_id=? and db_id=?","old_id,db_id",deleteRecords,record.getInt("batch_size"));
}else {
Db.use("masterDataSource").update("delete from " + record.getStr("table_name") + " where "+record.getStr("id_name")+" in ("
+ handleStr + ") ", updateIds.toArray());
Db.use("masterDataSource").batch("delete from " + record.getStr("table_name") + " where "+record.getStr("id_name")+"=?",record.getStr("id_name"),deleteRecords,record.getInt("batch_size"));
}
logger.info("分库同步主库删除数据任务完成");
}

View File

@@ -162,12 +162,13 @@ public class SyncThread implements Runnable {
@Override
public boolean run() throws SQLException {
List<Integer> updateIds = new ArrayList<Integer>();
StringBuffer handleStr = new StringBuffer();
List<Record> deleteRecords=new ArrayList<Record>();
StringBuilder handleStr=new StringBuilder();
for (int i = 0; i < datas.size(); i++) {
updateIds.add(datas.get(i).getInt("target_id"));
if (i == 0) {
if(i==0) {
handleStr.append("?");
} else {
}else {
handleStr.append(",?");
}
}
@@ -193,22 +194,18 @@ public class SyncThread implements Runnable {
}
logger.info("分库对主库修改操作的数据同步任务完成");
} else if (record.getInt("event") == 3) {
for (int i = 0; i < datas.size(); i++) {
Record deleteRecord=new Record();
deleteRecord.set(record.getStr("id_name"), datas.get(i).getInt("target_id"));
//如果是针对 event_record_library 下两行数据使用 不是则仅仅赋值 无意义
deleteRecord.set("old_id", datas.get(i).getInt("target_id"));
deleteRecord.set("db_id", -1);
deleteRecords.add(deleteRecord);
}
if(record.getStr("table_name").equals("event_record_library")) {
updateIds.clear();
handleStr.delete(0,handleStr.length());
for (int i = 0; i < datas.size(); i++) {
updateIds.add(datas.get(i).getInt("target_id"));
updateIds.add(-1);
if (i == 0) {
handleStr.append("(?,?)");
} else {
handleStr.append(",(?,?)");
}
}
Db.use(url.toString()).update("delete from event_record_library where (old_id,db_id) in ("+handleStr+")",updateIds.toArray());
Db.use(url.toString()).batch("delete from event_record_library where old_id=? and db_id=?","old_id,db_id",deleteRecords,record.getInt("batch_size"));
}else {
Db.use(url.toString()).update("delete from " + record.getStr("table_name") + " where "+record.getStr("id_name")+" in ("
+ handleStr + ") ", updateIds.toArray());
Db.use(url.toString()).batch("delete from " + record.getStr("table_name") + " where "+record.getStr("id_name")+"=?",record.getStr("id_name"),deleteRecords,record.getInt("batch_size"));
}
logger.info("分库对主库删除操作的数据同步完成");
}