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.VARCHAR
到 Types.LONGNVARCHAR
:
//Set OUT parameter
stmt.registerOutParameter(1, Types.LONGNVARCHAR);
而且我还读到它可以使用 Resultset
。
Link 另一个 Whosebug 问题
Output parameter from SQL Server stored procedure truncated at 4000 characters
我从数据库过程中获取数据,输出参数中有 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.VARCHAR
到 Types.LONGNVARCHAR
:
//Set OUT parameter
stmt.registerOutParameter(1, Types.LONGNVARCHAR);
而且我还读到它可以使用 Resultset
。
Link 另一个 Whosebug 问题 Output parameter from SQL Server stored procedure truncated at 4000 characters