如何使用simpleJdbcCall

时间:2019-07-19 14:55:00

标签: java sql-server spring jdbc

我有一个返回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();

1 个答案:

答案 0 :(得分:0)

我可以开始使用inputstream了。看来指针在最后,所以我要做的就是重置它并将xml解析为文档:

InputStream binaryStream = xml.getBinaryStream();
binaryStream.reset();
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document result = parser.parse(binaryStream);

然后使用它来获取我的属性和值。