Вставки базы данных в реактивном цикле - PullRequest
1 голос
/ 04 августа 2020

У меня есть следующий метод, в котором я выполняю вставку БД. Я хочу выполнить вставку в транзакции. Это означает, что когда в записях 100 значений, я хочу вставить их все и зафиксировать один раз.

Как я могу изменить следующее, чтобы я мог получать информацию record.value () для каждого запроса вставки ниже. Это, по сути, равносильно тому, что andThen () 100 раз, но, конечно, я не хочу писать andThen () 100 раз и не знаю количество записей, которые могут варьироваться. На заметку: Использование RX Java 1. Пожалуйста, посоветуйте. Спасибо.

public Observable<?> insert(Observable<Record<String, String>> records) {
    
// I am looking for a way to get this record.value() into the following return block. 
records.flatMap(record -> {
    String value = record.value();
    return null;
});

return client.rxGetConnection()
        // making it transactional by setting to false 
        .flatMap(connection -> connection.rxSetAutoCommit(false)
                // was looking to insert above records and flatMap operations here but it is not possible from what I have explored. 
                .toCompletable()
                // .andThen(connection.rxExecute("INSERT (name) VALUES " + record.value()) // trying to achieve this, to be able to get record.value for each insert
                .andThen(connection.rxExecute("INSERT (name) VALUES some_value"))
                .flatMap(rows -> connection.rxCommit())).toObservable();

}

...