首页 > 解决方案 > 使用 SimpleJdbcCall 调用存储过程时如何处理 clob 返回

问题描述

我正在调用一个存储过程,它返回大约 20 个字段。其中之一是一个clob。

我正在使用 Spring Jdbc,只是无法处理 clob 值。对 clob 的任何操作都会引发关闭连接错误。Clob 包含大量的 xml 数据。我已经尝试了一切,从使用 getCharacterStream、Readers、ByteArrays 没有任何运气。即使检查 clob 的长度也会引发关闭连接错误。

示例代码

SqlParameterSource params = new MapSqlParameterSource()
        .addValue("obj_key", objkey)



SimpleJdbcCall jdbcCall = new SimpleJdbcCall(provide())
        .withSchemaName("aa")
        .withCatalogName("bbb")
        .withProcedureName("cccccc")
        .declareParameters(
            new SqlParameter("obj_key", Types.NUMERIC),
            new SqlOutParameter("tv_flag", Types.NUMERIC),
            new SqlOutParameter("dtv_flag", Types.NUMERIC),
            new SqlOutParameter("dig_flag", Types.NUMERIC),
            new SqlOutParameter("in_flag", Types.NUMERIC),
            new SqlOutParameter("rfs_status", Types.VARCHAR),
            new SqlOutParameter("phone_flag", Types.NUMERIC),
            new SqlOutParameter("chan", Types.VARCHAR),
            new SqlOutParameter("prods", Types.VARCHAR),
            new SqlOutParameter("prods_clob", Types.CLOB),          ************this field
            new SqlOutParameter("prod_all", Types.NUMERIC),
            new SqlOutParameter("remainder", Types.NUMERIC),
            new SqlOutParameter("extrainfo", Types.VARCHAR),
            new SqlOutParameter("provider", Types.VARCHAR),
            new SqlOutParameter("areacode", Types.NUMERIC),
            new SqlOutParameter("moduldata", Types.VARCHAR));

    Map<String, Object> results = jdbcCall.execute(params);
    
    Clob clobProdPaks = (Clob) results.get("prods_clob");



clobProdPaks.length() >>>>>connection closed
clobProdPaks.getCharacterStream() >>>>>connection closed

任何人都可以建议如何处理这个 clob 字段吗?我不想使用带有很多 ????????? 的 callableStatement。我已经修剪了上面的输出参数,还有更多。

提前致谢。

标签: javaspringsimplejdbccall

解决方案


推荐阅读