gpt4 book ai didi

java - SQL Server 存储过程的输出参数被截断为 4000 个字符

转载 作者:行者123 更新时间:2023-11-30 02:39:28 24 4
gpt4 key购买 nike

当存储过程的输出参数包含超过 4000 个字符时,我遇到了问题。响应似乎被 JDBC 驱动程序截断了?我怎样才能得到完整的结果?

存储过程给出了完整的响应(> 4000 个字符),但我无法从 Java 打开它。我已经尝试过 jTDS 和 Microsoft 的 JDBC 驱动程序 6.0。这是我的代码:

CallableStatement pstmt = con.prepareCall("{call sp_horus_get_consultorios_stv(?)}"); 
pstmt.registerOutParameter(1, -1);
pstmt.setString(1, "");
pstmt.execute();
String sp_horus_get_consultorios_stv = pstmt.getString(1);

这适用于 sybase 中的存储过程。

最佳答案

我能够使用 Microsoft JDBC Driver 6.x 重现您的问题。我发现可以通过注释掉 setString 调用来避免该问题:

try (CallableStatement pstmt = conn.prepareCall("{call usp_horus_get_consultorios_stv(?)}")) {
pstmt.registerOutParameter(1, Types.LONGNVARCHAR);
//pstmt.setString(1, ""); // disabled
pstmt.execute();
String sp_horus_get_consultorios_stv = pstmt.getString(1);
System.out.println(sp_horus_get_consultorios_stv.length()); // > 4000 characters
}

不幸的是,该修复并没有解决 jTDS 1.3.1 下的问题。看来 jTDS 仍然受到描述的限制 here 。因此,对于 jTDS,我们似乎必须做这样的事情:

String sql = 
"DECLARE @out NVARCHAR(MAX);" +
"EXEC usp_horus_get_consultorios_stv @out OUTPUT;" +
"SELECT @out;";
try (
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql)) {
rs.next();
String sp_horus_get_consultorios_stv = rs.getString(1);
System.out.println(sp_horus_get_consultorios_stv.length()); // > 4000 characters
}

关于java - SQL Server 存储过程的输出参数被截断为 4000 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42160157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com