我有一个采用 CLOB 输入和 REFCURSOR 输出的 Oracle 存储过程。我通过传入 RowMapper 的 Spring SimpleJdbcCall 调用 SP 以映射结果。
但是,由于结果集很大,我需要向客户端提供回调功能。我不太清楚如何使用 Spring 添加 SP 调用的回调 - 无论是否有 SimpleJdbcCall。
我的一个想法是传入 RowCallbackHandler。这会起作用还是有更好的方法来解决这个问题?如有任何帮助,我们将不胜感激。
private Map<String, Object> arguments = ...;
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(this.jdbcTemplate)
.withCatalogName(this.packageName)
.withProcedureName(this.storedProcName)
.withoutProcedureColumnMetaDataAccess()
.declareParameters(this.outputParameters.toArray(new SqlOutParameter[]{}));
if(!isEmpty(inputParameters)) {
jdbcCall.declareParameters(inputParameters.toArray(new SqlParameter[]{}));
}
this.outputParameters.add(new SqlOutParameter(outputParamName, VARCHAR, rowMapper));
jdbcCall.execute(arguments);
最佳答案
实际上,RowCallbackHandler
是适合您的情况的一个很好的解决方案:
this.outputParameters.add(new SqlOutParameter(outputParamName, VARCHAR, new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
// Build model object from ROW and invoke client service from here
}
}));
jdbcCall.execute(arguments);
关于java - 使用带有回调的 Spring SimpleJdbcCall 调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23971434/