我从DB过程中获取数据,该过程在输出参数中返回XML。当我将此过程执行到DB时,它返回完整的XML,但是当我使用java执行它时,它只打印4000个字符。这是我的代码:
String sql = "{call SP_NAME(?)}";
try {
CallableStatement stmt = DataAccess.databaseConnection
.prepareCall(sql);
stmt.registerOutParameter(1,java.sql.Types.VARCHAR);
stmt.execute();
String result=(String)stmt.getNString(1);
S.O.P(result);//Printing result
} catch (Exception e) {
System.out.println(e);
}
这是什么原因?任何人都可以帮我找出问题吗?
答案 0 :(得分:1)
您的存储过程中的返回值是如何定义的?有可能它被定义为varchar(4000)。如果是这样,你的问题就在那里。
如果情况并非如此,请查看数据结构的限制。
如果那不是问题,您是否尝试过调试sql server驱动程序返回的内容?
答案 1 :(得分:0)
您可以尝试将输出参数注册为CLOB类型
stmt.registerOutParameter(1,java.sql.Types.CLOB);
答案 2 :(得分:0)
为了解决这个问题,我在程序中使用了两个输出参数,两者都返回XML的结果,而在java方面我只是连接两者以获得完整的结果,这解决了我的问题,希望这会对某人有所帮助。谢谢大家。
答案 3 :(得分:0)
我解决了将Types.VARCHAR
更改为Types.LONGNVARCHAR
的问题:
//Set OUT parameter
stmt.registerOutParameter(1, Types.LONGNVARCHAR);
,而且我读到它可以使用Resultset
来工作。
链接到另一个StackOverflow问题 {{3}}