Как перезаписать с помощью Spring jdbctemplate Batchupdate при вставке записей? - PullRequest
0 голосов
/ 05 мая 2018

Нужно вставить записи, используя пакетное обновление 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();
                }
            } );

    }

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Вы можете использовать один из следующих вариантов:

  1. как сказал @fbokovikov, вы можете использовать команду merge sql.
  2. Вы можете проверить, существует запись или нет. В случае производительности вы можете сначала получить все ключи из базы данных, а затем сгенерировать правильные запросы вставки и обновления, используя эти ключи. В этом сценарии вы должны знать о низкой производительности, если в вашей таблице большие данные.
  3. Вы можете сначала удалить записи, а затем вставить их все. Это очень плохо по производительности. : -)

Надеюсь, это поможет

0 голосов
/ 05 мая 2018

Нужно вставить записи, используя пакетное обновление пружины jdbctemplate. в то время как вставка, если найдена повторяющаяся запись, запись должна быть обновлена еще вставлено

Для этого вы должны использовать стандартную команду SQL-2003 merge .

В MySQL эта команда имеет следующий синтаксис:

ВСТАВИТЬ ... НА ДУБЛИКОВАТЬ КЛЮЧ ОБНОВЛЕНИЕ

...