如何使用列表作为Vertx JDBC Client进行SQL查询的参数源?

问题描述 投票:1回答:1

我有一个Vert.x Web应用程序,需要查询运行Postgres 10.7的AWS RDS实例。 Vert.x JDBC客户端为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 (?, ?, ?, ..., ?)并将列表中的每个String添加到JsonArray,但必须有一种方法可以将ArrayList<String>作为参数添加,使查询保持简单。如何在查询中指定要匹配的值列表?

postgresql jdbc vert.x
1个回答
0
投票

Vert.x JDBC客户端不支持查询中的数组参数。

但是Vert.x Pg Client可以实现,它不依赖JDBC。您需要先修改您的查询:

SELECT a FROM table WHERE col = ANY(?)

然后:

pgClient.preparedQuery(query, Tuple.of(possibleValues), collector, handler);
© www.soinside.com 2019 - 2024. All rights reserved.