Как передать неопределенные параметры в prepareQuery при использовании reactive-postgresql-client?

Кто-нибудь знает, как передать неопределенные параметры в client.preparedQuery? Пожалуйста, посмотрите на изображение ниже, цените любую помощь!

@Override
public Future<List<User>> getByIds(List<String> ids) {
    Promise<List<User>> promise = Promise.promise();
    // How to pass the uncertain parameters to preparedQuery?
    pool.preparedQuery("SELECT * FROM users WHERE id IN ($1)", Tuple.wrap(ids.toArray()), ar -> {
        if (ar.succeeded()) {
            RowSet<Row> rows = ar.result();
            List<User> users = new ArrayList<>();
            for (Row row : rows) {
                User user = User.fromDatabaseRow(row);
                users.add(user);
            }
            promise.complete(users);
        } else {
            promise.fail(ar.cause());
        }
    });
    return promise.future();
}

ht tps:https://stackru.com/images/2d862980d797cb923d1f90dfc6afa0cb39728b54.png

1 ответ

Решение

Чтобы передать массив в PostgreSQL, вам нужно использовать = ANY(params) вместо того IN(params)

SELECT * FROM users WHERE id = ANY($1)

Кроме того, вам нужно передать массив String в ANY, ваш код должен быть:

pool.preparedQuery(
        "SELECT * FROM users WHERE id = ANY($1)", 
        Tuple.of(ids.toArray(String[]::new)), 
        ar -> {..}
)
Другие вопросы по тегам