在Apache Camel中访问存储过程的多个结果集

我正在构建使用Apache Camel的概念证明。 我正在尝试构建一个路由,它将使用JDBC组件调用Sybase DB上的存储过程,然后处理其多个结果集。

到目前为止,我使用Spring进行了以下配置:

<camelContext id="context">
    <route>
        <from uri="direct:start"/>
        <bean ref="sqlStatementCreator"/>
        <to uri="jdbc:dataSource?resetAutoCommit=false"/>
        <bean ref="sqlResultsProcessor"/>
    </route>
</camelContext>

sqlStatementCreator是一个简单的类,只有一个方法返回包含执行存储过程的sql语句的String:

{call sp_name ('some arg')}

存储过程返回2个(或更多)结果集和我需要的数据。

问题是如何访问sqlResultsProcessor中的结果集?

JDBC组件的文档声明“结果在OUT主体中作为ArrayList>返回”。 如果存储过程只返回一个结果集,那完美的工作。 但是,如果在sqlResultsProcessor中检查Exchange正文时出现多个结果集,则我有空。

  • 也许Camel不能使用JDBC组件返回OUT主体中的多个结果集?
  • 也许最好是编写一个自定义bean来访问将处理结果并将它们放入OUT主体的数据库?
  • 或者,也许我完全错过了什么?
  • Apache Camel版本是2.9.2。

    我不得不将resetAutoCommit = false选项添加到jdbc组件,因为否则Sybase引发异常:

    com.sybase.jdbc3.jdbc.SybSQLException: Stored procedure 'sp_name' may be run only in unchained transaction mode.
    

    而且我无法更改存储过程。 它是这样的。


    正如我自己发现的那样, Apache Camel(v.2.9.0)目前不支持使用JDBCProducer处理多个结果集 。 正如您可以在processingSql *方法中的JDBCProducer的源代码中看到的那样:

    if (stmt.execute(sql)) {
        rs = stmt.getResultSet();
        setResultSet(exchange, rs);
    }
    

    执行SQL语句生成器获取第一个ResultSet并将其设置为Exchange后。

    因此,如果您需要处理多个ResultSet,最好编写自己的bean来执行SQL并处理其结果。

    链接地址: http://www.djcxy.com/p/74413.html

    上一篇: Accessing stored procedure's multiple result sets in Apache Camel

    下一篇: Check in JDBC that a request execute correctly