Почему шаблон Spring jdbc batchUpdate не обновляет запись, если идентификатор уже существует?

#java #spring #spring-jdbc #jdbctemplate

Вопрос:

Я пытаюсь обновить/вставить массовые записи в таблицу

Таким образом, моя существующая таблица имеет схему, как показано ниже

 create table accounts{
acc_id int not null,
acc_name varchar(20) not null,
client_name varchar(20) not null,
price int not null
}
 

Я извлекаю около полумиллиона записей из сторонней конечной точки..некоторые из идентификаторов acc_ids могут уже существовать в таблице, для которой я хотел бы обновить имя пользователя, имя клиента и цену, а для новых записей я хочу вставить новую запись в таблицу.

Можно ли этого достичь с помощью Spring JDBC batchUpdate?

До сих пор у меня есть это…

 public void insertRecords(){
        String query = "Insert into accounts(acc_id, acc_name, client_name, price) values(?,?,?,?)";
        List<Account> accounts = new ArrayList();
        Account a1 = new Account();
        a1.setAccID(1);
        a1.setAccName("ABC");
        a1.setClientName("C1");
        a1.setPrice(100);
        
        Account a2 = new Account();
        a2.setAccID(11);
        a2.setAccName("ZAABC");
        a2.setClientName("XC1");
        a2.setPrice(1000);
        
        accounts.add(a1);
        accounts.add(a2);
        
        List<Account> new ArrayList
        jdbcTemplate.batchUpdate(query, accounts, accounts.size(),new ParameterizedPreparedStatementSetter<Book>() {
                            public void setValues(PreparedStatement ps, Account account) 
                                throws SQLException {
                                ps.setInt(1, account.getAccID());
                                ps.setString(2, account.getAccName());
                                ps.setString(3, account.getClientName());
                                ps.setInt(4, account.getPrice());
                            }
                        });
        }
    }
 

В моей таблице есть только одна запись со значениями acc_id 11, acc_name ZAABC, имя клиента XC1 , цена 500. Я хочу, чтобы batchUpdate вставил новую запись для acc_id 1 и обновил цену до 1000 для acc_id 11. Однако вышесказанное не сработает, если идентификатор учетной записи уже существует и он вставляет новые записи. Таким образом, всего существует три записи, однако ожидается только две, одна для acc_id 1 и другая для acc_id 2.

Правильно ли использовать Insert как для вставки, так и для обновления? Пожалуйста, посоветуйте

Комментарии:

1. Потому batchUpdate что предназначен для выполнения запросов на изменение данных (несмотря на название). Вы написали запрос на вставку, чтобы он вставлял, конечно, если ваша база данных поддерживает его, вы могли бы написать запрос на вставку/СЛИЯНИЕ вместо запроса на вставку, чтобы он выполнял и то, и другое. Но это сильно зависит от вашей базы данных.