java - 如何使用 simpleJdbcCall 在存储过程中获取 XML 输出参数
问题描述
我有一个返回 XML 的过程,我正在使用 simpleJdbcCall 来执行它。当我以地图形式获得结果时,它返回一个 SQLServerSQLXML。我将它转换为 java.sql.SQLXML 以使用 getString() 方法但没有成功。它抛出一个 NegativeArraySize 异常。当我在 SQLServer Management Studio 中执行该过程时,它会工作并生成 XML。
我已经尝试获取二进制流但没有成功,它只返回了两个 unicode 字符:ÿ
(255)和þ
(254)。
这是我的 SimpleJdbcCall:
SimpleJdbcCall simpleCall = new SimpleJdbcCall(dataSource)
.withCatalogName("dbo")
.withProcedureName("pProcName")
.withoutProcedureColumnMetaDataAccess()
.declareParameters(new SqlParameter("@ID", Types.BIGINT))
.declareParameters(new SqlOutParameter("@XmlOut", Types.SQLXML));
我已经设置了 ID 并将其放在 MapSqlParameterSource 上,然后执行该过程:
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("@ID", inDTO.getIdCertificado());
Map<String, Object> mapa = simpleCall.execute(params);
SQLXML xml = (SQLXML) mapa.get("@XmlOut");
String val = xml.getString();
解决方案
我可以开始使用输入流。似乎指针在末尾,所以我只需要重置它并将我的 xml 解析为文档:
InputStream binaryStream = xml.getBinaryStream();
binaryStream.reset();
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document result = parser.parse(binaryStream);
然后使用它来获取我的属性和值。
推荐阅读
- javascript - 使用 C# 反序列化 javascript 字符串而不是 JSON
- python - 如何迭代值并创建符合条件的人员列表
- javascript - 通过带有过滤的嵌套映射创建数组
- javascript - 将 div 与元素分开时的 FocusOut/Blur
- excel - 模块内用于调用自身的键盘快捷键
- latex - 使用 Pandoc 将 Latex 方程转换为 Sphinx 的 RST
- arrays - 比较C中的两个数组
- c++ - 实现系统注册的COM接口
- python - 如何使用 python selenium 自动选择文本并保存到 csv/excel
- c - 如何让我的内存地址在 C 程序中正确打印?