java—如何在使用SimpleJDBCall调用存储过程时处理clob返回

owfi6suc  于 2021-07-23  发布在  Java
关注(0)|答案(0)|浏览(181)

我正在调用一个存储过程,它返回大约20个字段。其中一个是clob。
我使用的是springjdbc,无法处理clob值。clob上的任何操作都会引发关闭连接错误。clob包含大量xml数据。我什么都试过了,从使用getcharacterstream、readers到bytearray,都没有运气。即使检查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中使用大量的?????????。我删掉了上面的参数,还有很多。
提前谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题