} if (found) { toBeUpdated.add(current); } else { toBeInserted.add(current); } } } // 批量插入 if (!toBeInserted.isEmpty()) { jxMjKhTxService.batchInsert(toBeInserted); } 批量插入不动了
时间: 2023-07-15 12:09:59 浏览: 53
如果批量插入操作出现问题,可能是由于以下几个原因:
1. 数据库连接问题:请确保数据库连接正常,并且数据库账户有足够的权限执行批量插入操作。
2. 数据库表结构问题:请确保插入的数据字段与表结构的字段一致,数据类型也要匹配。如果数据类型不匹配,可能会导致插入失败。
3. 数据库事务问题:请确保批量插入操作是在同一个事务中执行的,如果插入的数据量过大,事务可能会超时或者被回滚。
4. 数据重复问题:请确保插入的数据没有重复,如果有重复数据,请使用更新操作或者去重操作。
如果以上方法都无法解决问题,请检查日志文件或者调整代码以输出更多的错误信息,以便更好地定位问题所在。
相关问题
// 遍历当前查询结果,看看是否需要插入或更新 for (Map<String, Object> current : result) { boolean found = false; for (Map<String, Object> last : lastResult) { if (current.equals(last)) { found = true; break; } } if (found) { toBeUpdated.add(current); } else { toBeInserted.add(current); } }
这段代码的作用是将当前查询结果与上一次查询结果进行比较,找出需要插入和更新的数据。具体来说,它首先定义了两个空的 List,即 toBeUpdated 和 toBeInserted,用于存储需要更新和插入的数据。然后通过 for 循环遍历当前查询结果 result 中的每一个元素 current,并在内部再次通过 for 循环遍历上一次查询结果 last 中的每一个元素,比较两个元素是否相等。如果找到了相等的元素,说明当前元素需要更新,将其添加到 toBeUpdated 中;如果没有找到相等的元素,说明当前元素需要插入,将其添加到 toBeInserted 中。最后,整个函数返回两个 List,分别代表需要插入和更新的数据。
if (lastResult.isEmpty()) { toBeInserted = result; } else { // 遍历上一次查询结果,看看是否需要更新或删除 for (Map<String, Object> last : lastResult) { boolean found = false; for (Map<String, Object> current : result) { if (last.get("jsbh").equals(current.get("jsbh")) && last.get("sm").equals(current.get("sm")) && last.get("code").equals(current.get("code")) ) { found = true; break; } } if (!found) { toBeDeleted.add(last); } } // 遍历当前查询结果,看看是否需要插入或更新 for (Map<String, Object> current : result) { boolean found = false; for (Map<String, Object> last : lastResult) { if (last.get("jsbh").equals(current.get("jsbh")) && last.get("sm").equals(current.get("sm")) && last.get("code").equals(current.get("code")) ) { found = true; break; } } if (found) { toBeUpdated.add(current); } else { toBeInserted.add(current); } } } // 批量插入 if (!toBeInserted.isEmpty()) { jxMjKhTxService.batchInsert(toBeInserted); } // 批量更新 if (!toBeUpdated.isEmpty()) { jxMjKhTxService.batchUpdate(toBeUpdated); } // 批量删除 if (!toBeDeleted.isEmpty()) { jxMjKhTxService.batchDelete(toBeDeleted); } // 保存本次查询结果 lastResult = result; 一、相同数据会重复新增 二、之前有的数据这次没有却没有删除掉, 详细解决办法
这段代码的逻辑是遍历当前查询结果和上一次查询结果,然后根据是否存在相同的记录进行插入、更新或删除操作。但是可能存在以下问题:
1. 相同数据会重复新增:因为如果当前查询结果中存在和上一次查询结果相同的记录,那么这些记录就会被当作需要更新的记录,而不是插入的记录。如果这些记录在上一次查询结果中不存在,那么它们就不会被更新,也不会被删除,而会被当做需要插入的记录插入到数据库中。解决这个问题的方法是在更新操作之前,先判断这些记录是否需要插入,如果需要插入就不需要更新了。
2. 之前有的数据这次没有却没有删除掉:这个问题可能是因为在遍历上一次查询结果时,没有把没有匹配上的记录加入到toBeDeleted列表中。解决这个问题的方法是在遍历上一次查询结果时,如果没有找到匹配的记录,就将这条记录加入到toBeDeleted列表中。
下面是修改后的代码:
```
if (lastResult.isEmpty()) {
toBeInserted = result;
} else {
// 遍历上一次查询结果,看看是否需要更新或删除
for (Map<String, Object> last : lastResult) {
boolean found = false;
for (Map<String, Object> current : result) {
if (last.get("jsbh").equals(current.get("jsbh")) && last.get("sm").equals(current.get("sm")) && last.get("code").equals(current.get("code"))) {
found = true;
// 判断是否需要更新
if (!last.equals(current)) {
toBeUpdated.add(current);
}
break;
}
}
// 如果没有找到匹配的记录,就将这条记录加入到toBeDeleted列表中
if (!found) {
toBeDeleted.add(last);
}
}
// 遍历当前查询结果,看看是否需要插入
for (Map<String, Object> current : result) {
boolean found = false;
for (Map<String, Object> last : lastResult) {
if (last.get("jsbh").equals(current.get("jsbh")) && last.get("sm").equals(current.get("sm")) && last.get("code").equals(current.get("code"))) {
found = true;
break;
}
}
if (!found) {
toBeInserted.add(current);
}
}
}
// 批量插入
if (!toBeInserted.isEmpty()) {
jxMjKhTxService.batchInsert(toBeInserted);
}
// 批量更新
if (!toBeUpdated.isEmpty()) {
jxMjKhTxService.batchUpdate(toBeUpdated);
}
// 批量删除
if (!toBeDeleted.isEmpty()) {
jxMjKhTxService.batchDelete(toBeDeleted);
}
// 保存本次查询结果
lastResult = result;
```