Как получить ключ от запроса вставки rxjava в vert.x - PullRequest
0 голосов
/ 09 января 2019

У меня есть метод вставки в моем проекте vert.x, написанный в стиле rxjava. В моем методе я запускаю запрос на вставку, чтобы вставить запись в MS SQL Server. Я хочу получить автоинкрементный ключ вновь вставленной записи. Как я могу получить это?

Вот мой код.

 @Override
public Single<Record> save(Record record) {
    return new AsyncResultSingle<Record>(resultHandler -> {
        jdbcClient.rxGetConnection()
        .subscribe(connection -> {
            String sql = "INSERT into record (ani, template_id) values (?, ?)";
            JsonArray params = new JsonArray().add(record.ani).add(record.templateId);
            connection.rxQueryWithParams(sql, params)
            .doAfterTerminate(connection::close)
            .subscribe(resultSet -> {
                List<JsonObject> rows = resultSet.getRows();
                //how I can get a key or Record object which has been inserted?
                resultHandler.handle(Future.succeededFuture());
            }, onError -> {
                resultHandler.handle(Future.failedFuture(onError));
            });
        }, onError -> {
            resultHandler.handle(Future.failedFuture(onError));
        });
    });
}

Ответы [ 2 ]

0 голосов
/ 10 января 2019

После того, как я изменился

 connection.rxQueryWithParams(sql, params)

до

connection.rxUpdateWithParams(sql, params)

тогда я могу получить ключ как;

 JsonArray rows = resultSet.getKeys();

Спасибо @taygetos за подсказку.

0 голосов
/ 10 января 2019

Я думаю, вместо

List<JsonObject> rows = resultSet.getRows();

вы ищете

List<JsonArray> results = resultSet.getResults();

РЕДАКТИРОВАТЬ: вы уже поняли это, но чтобы исправить мой ответ здесь: вы также должны использовать rxUpdateWithParams вместо rxQueryWithParams.

...