首页 > 解决方案 > 插入记录时如何使用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();
                }
            } );

    }

标签: javamysqlspringjdbctemplate

解决方案


您可以使用以下选项之一:

  1. 正如@fbokovikov 所说,您可以使用mergesql 命令。
  2. 您可以检查记录是否存在。在性能方面,您可以首先从 db 获取所有键,然后使用这些键生成正确的插入和更新查询。在这种情况下,如果您的表中有大数据,您应该意识到性能不佳。
  3. 您可以先删除记录,然后将它们全部插入。这在性能上是非常糟糕的。:-)

希望有帮助


推荐阅读