当前位置: 首页 > 知识库问答 >
问题:

Vertx JDBC客户端queryWithParams-如何添加列表?

濮阳景天
2023-03-14

我有SQL查询条件<代码>货币在?我使用vertx JDBC客户端queryRetparams方法,它在JsonArray中接收查询参数。

如何将我可能的货币值列表传递给查询?我尝试了new JsonArray(). add(new JsonArray(货币)但是得到了异常

组织。postgresql。util。PSQLException:无法推断用于io实例的SQL类型。维特斯。果心json。杰索纳雷。使用带有显式类型值的setObject()指定要使用的类型。

共有2个答案

仇和蔼
2023-03-14

有两种选择。

如果您想支持多个数据库,您必须自己扩展表达式:

"... currency IN (" + String.join(",", Collections.nCopies(currencies.size(), "?")) + ")"

如果只支持PostreSQL,则可以使用任何运算符:

WHERE currency = ANY(?)
习阳
2023-03-14

简单的回答是,您不能使用通用VertxJDBC客户端添加List作为查询参数,但是由于您正在使用Postgres,因此您可以使用一个名为vertx-pg-Client的Postgres特定库。我用这段代码实现了大致相同的查询:

List<String> currencies = whatever();
String uri = "your-uri";
String query = "select from table where currency = any($1)";
PgConnection.connect(vertx, uri, connectionResult -> {
    if (connectionResult.failed()) {
        // handle
    } else {
        PgConnection connection = connectionResult.result();
        Tuple params = Tuple.of(currencies);

        doQuery(query, connection, params).setHandler(queryResult -> {
            connection.close();
            msg.reply(queryResult.result());
        });
    }
});

    private Future<String> doQuery(String sql, PgConnection connection, Tuple params) {
        Promise<String> promise = Promise.promise();
        connection.preparedQuery(sql, params, res -> {
            if (res.failed()) {
                // log
                promise.fail(res.cause());
            } else {
                RowSet<Row> rowSet = res.result();
                // do something with the rows and construct a return object (here, a string)
                String result = something;
                promise.complete(result);
            }
        });
        return promise.future();
    }

所有的功劳都归功于在这里帮助我解决同样问题的@tegismont。

 类似资料:
  • 该快速入门将展示如何搭建一个 JavaScript 客户端应用程序,其中的用户将登陆到 IdentityServer,使用 IdentityServer 发布的访问令牌调用 Web API,然后从 IdentityServer 注销。 新的 JavaScript 客户端项目 创建一个新的 JavaScript 应用程序项目。这可以是一个简单的空的 Web 项目,或者空的 ASP.NET Core

  • 问题内容: 我正在为具有List作为查询参数的GET服务创建Jersey客户。根据文档,可以将List作为查询参数(此信息也位于@QueryParam javadoc中),将其检出: 通常,方法参数的Java类型可以: 是原始类型; 有一个接受单个String参数的构造函数; 3. 有一个名为valueOf或fromString的静态方法,该方法接受单个String参数(例如,参见Integer.

  • 问题内容: 我有以下代码使用SSL将服务器与客户端连接,现在我想添加客户端身份验证: (我有一个服务器密钥库(JCEKS类型)和一个客户端密钥库(JKS类型),服务器使用了一个信任库(证书),在其中我导入了两个证书,因为我也想使用此信任库进行客户端身份验证) 客户代码: 服务器代码: 在此先感谢您的帮助。 编辑:我在服务器端添加此代码: 但是,如果我删除cacerts中的客户端证书,则连接不会给我

  • 我可以通过源代码集成功地将生成的openapi客户端添加到我的项目中。但是我必须将依赖项复制到主中,解决冲突- 所以我添加到我的和到我的依赖项。这样我就有了以下文件: : 和: 我预先执行,在将其作为子项目添加之后,我执行Gradle- 然后,Eclipse向我展示了一个问题: 我不知道从这里去哪里,寻址子文件夹中的子项目工作得很好,当我通过https://guides.gradle.org/cr

  • 莴苣支持这种开箱即用的群集/分片吗?如果是,如何将其配置为使用客户端散列?