У меня есть веб-приложение Vert.x, которому нужно запросить экземпляр AWS RDS, работающий Postgres 10.7. Клиент Vert.x JDB C имеет значение io.vertx:vertx-jdbc-client:3.8.4
. Я хочу запросить таблицу с ограничением, что значение определенного столбца включено в набор значений:
select from table where column in/any (?)
Я следовал документации Vertx, в которой говорится, что для создания JsonArray
и заполните его значениями для вставки в запрос. Столбец имеет тип text
, а список, которому я хочу соответствовать, это Java ArrayList<String>
. Мой код запроса выглядит следующим образом:
String sql = "SELECT a FROM table WHERE col IN (?)";
List<String> values = someObject.someField();
sqlClient.getConnection(connectionResult -> {
if (connectionResult.failed()) {
// handle
} else {
SQLConnection connection = connectionResult.result();
JsonArray params = new JsonArray()
.add(values);
connection.queryWithParams(sql, params, queryResult -> {
if (queryResult.failed()) {
// handle
} else {
// parse
}
});
}
});
Запрос не выполняется с ошибкой: org.postgresql.util.PSQLException: Can't infer the SQL type to use for an instance of io.vertx.core.json.JsonArray. Use setObject() with an explicit Types value to specify the type to use.
Я знаю, что в худшем случае я могу создать буквальную SQL строку where col in (?, ?, ?, ..., ?)
и добавьте каждую строку из списка в JsonArray
, но должен быть способ просто добавить ArrayList<String>
в качестве параметра и сделать запрос простым. Как я могу указать список значений для сравнения в моем запросе?