如何在使用 reactive-postgresql-client 时将不确定参数传递给 preparedQuery?
How to pass uncertain parameters to preparedQuery while using 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 ()", 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();
}
要将数组传递给 PostgreSQL,则必须使用 = ANY(params)
而不是 IN(params)
SELECT * FROM users WHERE id = ANY()
此外,您必须将一个字符串数组传递给 ANY
,您的代码应该是:
pool.preparedQuery(
"SELECT * FROM users WHERE id = ANY()",
Tuple.of(ids.toArray(String[]::new)),
ar -> {..}
)
有人知道如何将不确定参数传递给 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 ()", 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();
}
要将数组传递给 PostgreSQL,则必须使用 = ANY(params)
而不是 IN(params)
SELECT * FROM users WHERE id = ANY()
此外,您必须将一个字符串数组传递给 ANY
,您的代码应该是:
pool.preparedQuery(
"SELECT * FROM users WHERE id = ANY()",
Tuple.of(ids.toArray(String[]::new)),
ar -> {..}
)