java - 插入记录时如何使用spring jdbctemplate batchupdate覆盖?
问题描述
需要使用spring jdbctemplate批量更新插入记录。如果发现重复记录,则插入时需要更新记录,否则插入。我怎么做?下面是我的代码。
注意:不包括异常处理。
result = jdbcTemplate.batchUpdate(
"insert ignore xxx set yy = ?, zz = ? where aa = ?",
new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setDouble(1, Double.parseDouble(new JSONObject(jsonArray.get(i).toString()).get("aa").toString()));
ps.setDouble(2, Double.parseDouble(new JSONObject(jsonArray.get(i).toString()).get("bb").toString()));
ps.setString(3, new JSONObject(jsonArray.get(i).toString()).get("cc").toString());
}
public int getBatchSize() {
return jsonArray.length();
}
} );
}
解决方案
您可以使用以下选项之一:
- 正如@fbokovikov 所说,您可以使用
merge
sql 命令。 - 您可以检查记录是否存在。在性能方面,您可以首先从 db 获取所有键,然后使用这些键生成正确的插入和更新查询。在这种情况下,如果您的表中有大数据,您应该意识到性能不佳。
- 您可以先删除记录,然后将它们全部插入。这在性能上是非常糟糕的。:-)
希望有帮助
推荐阅读
- c++ - 访问我不应该被允许访问的数据成员
- javascript - Django - 无法将 Django 表单的 id 传递给 javascript 变量
- windows - 如何在 FOR 循环中获取当前日期
- list - Swift - 如何保存对 CoreData 属性的更改
- php - 使用 fopen() 和 fread() 实现网站搜索功能
- php - 在 PHP 中组合键数组和值数组
- javascript - 具有自身默认值的对象解构赋值
- c++ - 我必须在哪些功能中使用 std::?
- python-3.x - 获取矩阵中向量的长度
- python - 我是否正确使用了 on_guild_leave 函数?