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

标签 java spring stored-procedures callback spring-jdbc

我有一个采用 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/

相关文章:

php - 在opencart中调用同时具有IN和OUT参数的存储过程

sql - 在 SQL Server 存储过程中搜索表中指定列值的有效方法是什么?

java - Firebase 数据库到 facebook 广告 aduintid 控制

java - 设置嵌套在映射中的映射的值

java - Codenameone 通过模拟器分享 Facebook

java - Tomcat集群中使用ehcache进行缓存复制

java - 将 @PathVariable 传递到我的所有 JSP 页面而不将其添加到 ModelAndView 的最佳方法是什么?

java - `NullPoinerException` 依赖于 `@Autowired`

控制台中的 Java 消息 - 两种方法具有相同的方法签名但不提供可分配的类?

mysql - 存储过程不起作用?