java - 如何在插入记录时使用 spring jdbctemplate batchupdate 覆盖?

标签 java mysql spring jdbctemplate

需要插入记录使用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();
                }
            } );

    }

最佳答案

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

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

希望对你有帮助

关于java - 如何在插入记录时使用 spring jdbctemplate batchupdate 覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50188168/

相关文章:

java - 无法访问公共(public)内部类的公共(public)字段

java - 关闭扫描仪导致无限循环

mysql - 使用其他列中的值在 mySQL 中创建新列

java - @RequestMapping 没有按预期工作

java - 在 Spring 中作为 bean 属性的完整路径

java - 如何从 Servlet 中的 WebApplicationContext 检索通常由 @Value 连接的值?

java - 单击后更改按钮文本,然后使用 JAVA ActionEvent 再次单击后恢复更改

java - 刷新访问 token Retrofit2 + RXJava2

mysql - 无法让简单的 SELECT 工作

mysql - 需要按值对记录进行 GROUP 和 COUNT,然后 qty > X 被 DELETED 到某个 qty