在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正文时出现多个结果集,则我有空。
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