使用带有回调的Spring SimpleJdbcCall调用存储过程

时间:2014-05-31 14:55:53

标签: java spring stored-procedures callback spring-jdbc

我有一个Oracle存储过程,它接受CLOB输入和REFCURSOR输出。我通过Spring SimpleJdbcCall调用SP来传递RowMapper来映射结果。

但是,由于结果集很大,我需要为客户端提供回调功能。我无法弄清楚如何使用Spring为使用和不使用SimpleJdbcCall的SP调用添加回调。

我有一个想法就是传入一个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);

1 个答案:

答案 0 :(得分:2)

实际上,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);