Java 如何使用SimpleJDBCall在StoredProcess中获取XML out参数
我有一个返回XML的过程,我使用SimpleJDBCall来执行它。当我将结果作为映射得到时,它返回一个SQLServerSQLXML。我将其转换为java.sql.SQLXML以使用getString()方法,但没有成功。它抛出一个NegativeArraySize异常。当我在SQLServerManagementStudio中执行该过程时,它工作并生成XML 我已经尝试获取二进制流,但没有成功,它只返回了两个unicode字符:Java 如何使用SimpleJDBCall在StoredProcess中获取XML out参数,java,sql-server,spring,jdbc,Java,Sql Server,Spring,Jdbc,我有一个返回XML的过程,我使用SimpleJDBCall来执行它。当我将结果作为映射得到时,它返回一个SQLServerSQLXML。我将其转换为java.sql.SQLXML以使用getString()方法,但没有成功。它抛出一个NegativeArraySize异常。当我在SQLServerManagementStudio中执行该过程时,它工作并生成XML 我已经尝试获取二进制流,但没有成功,它只返回了两个unicode字符:ÿ(255)和þ(254) 这是我的SimpleJDBCall:
ÿ
(255)和þ
(254)
这是我的SimpleJDBCall:
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();
MapSqlParameterSource params=新的MapSqlParameterSource();
params.addValue(“@ID”,inDTO.getIdCertificado());
Map mapa=simpleCall.execute(参数);
SQLXML=(SQLXML)mapa.get(“@XmlOut”);
String val=xml.getString();
我可以使用inputstream。指针似乎在末尾,所以我只需重置它并将xml解析为文档:
InputStream binaryStream = xml.getBinaryStream();
binaryStream.reset();
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document result = parser.parse(binaryStream);
然后用它来获取我的属性和值