java - 使用 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。我已经修剪了上面的输出参数,还有更多。
提前致谢。
解决方案
推荐阅读
- serverless - 无服务器 - 在部署之前更改内容
- c++ - 使用支持 c++17 的正确默认 g++ 版本
- javascript - 用于查找给定时间和两个控制点的进度的三次贝塞尔函数
- c++ - 连接用户自定义功能以使用 Qt Widgets 修改 VTK 对象
- python - 提高大型 JSON 文件的读取性能
- c# - C#按ID搜索txt文件并删除文件中由\n分隔的整行
- kubernetes - 启用 GridGain 控制中心来点燃部署在 Google Kubernetes 集群中的集群
- r - 在ggplot中的聚集条之间添加空格?
- javascript - 如何在 React 的文本字段中显示来自 API 的内容?
- kubernetes - 豆荚被杀死并重新创建说明 - OutOfphemeral-storage?