具有命名 Jdbc 查询或结果集的 Hazelcast Jet?

问题描述

我是 Hazelcast Jet 的新手,我正在使用 Spring JdbcTemplate 来执行我的查询,该查询在查询中使用命名参数,但我不确定如何将它与 Hazelcast Jet 一起使用。

例如Hazelcast 的工作方式如下:

Pipeline p = Pipeline.create();
p.readFrom(Sources.jdbc(
    () -> DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql"),(con,parallelism,index) -> {
        PreparedStatement stmt = con.prepareStatement(
              "SELECT * FROM person WHERE MOD(id,?) = ?)");
        stmt.setInt(1,parallelism);
        stmt.setInt(2,index);
        return stmt.executeQuery();
    },resultSet -> new Person(resultSet.getInt(1),resultSet.getString(2))
)).writeTo(Sinks.logger());

但我想使用像 ? 这样的命名查询来代替 SELECT * FROM person WHERE MOD(id,:id) = :id)。 Hazelcast 是否支持命名查询或 Spring JdbcTemplate

同样在 Sources 中,我们可以将 ResultSet 作为源直接传递吗?有很多来源,但我没有找到“ResultSet”的任何来源。

例如

p.readFrom(Sources.resultSet(<Resultset Object>) //something like this

如果可能,请帮我解决这个问题。

解决方法

我假设“命名 JDBC 查询”是指“命名参数”。

它不是 JDBC API 的标准特性,它是 Spring Framework 提供的一种便利。 Hazelcast Jet 不支持它。我们目前正在研究如何在 Hazelcast Jet 和 Spring 之间提供更好的集成,这是我们关注的事情之一。

,

我将回答问题的另一部分:从技术上讲,创建 ResultSet 源是不可能的。查询必须在集群上执行,您不能在客户端执行查询并将其发送到集群以获取行。这就是为什么 JDBC 源要求您提供 SQL 语句和 lambda 来创建连接,但连接将在集群中创建并用于执行查询。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...