java 中的字符串长度问题

String length issue in java

我从数据库过程中获取数据,输出参数中有 returns XML,当我将此过程执行到数据库中时,它 returns 完整 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);
}

这是什么原因?谁能帮我找出问题所在?

您的 return 值是如何在您的存储过程中定义的?它很可能被定义为 varchar(4000)。如果是这样,那你的问题就出在这里。

如果不是这种情况,请查看您的数据结构的限制。

如果这不是问题,您是否尝试调试 sql 服务器驱动程序 return?

您可以尝试将输出参数注册为 CLOB 类型

stmt.registerOutParameter(1,java.sql.Types.CLOB);

为了解决这个问题,我在过程中使用了两个输出参数,returns XML 的结果,在 java 方面,我只是将两者连接起来以获得完整的结果,这解决了我的问题,希望这会帮助别人。感谢大家。

我解决了这个改变 Types.VARCHARTypes.LONGNVARCHAR:

//Set OUT parameter
stmt.registerOutParameter(1, Types.LONGNVARCHAR);

而且我还读到它可以使用 Resultset

Link 另一个 Whosebug 问题 Output parameter from SQL Server stored procedure truncated at 4000 characters