java调用存储过程同时获取[返回参数]和[结果集]
2013-03-04 09:50
786 查看
来源:http://blog.csdn.net/security08/article/details/5148586
执行以下代码,报错:
String querySQL = "{?=call p_sys_manager_csReport(?,?,?,?,?)}";
cstmt = conn.prepareCall(querySQL);
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setInt(2, modType);
cstmt.setInt(3, dptId);
cstmt.setInt(4, eplId);
cstmt.registerOutParameter(5, java.sql.Types.VARCHAR);
cstmt.registerOutParameter(6, java.sql.Types.VARCHAR);
rs = cstmt.executeQuery();
if (rs != null) {
if (rs.next()) {
companyTotal = rs.getInt("companyTotal");
}
}
String temp = null;
temp = cstmt.getString(5);//此行报错
报错信息为:
java.sql.SQLException: Output parameters have not yet been processed. Call getMoreResults().
at net.sourceforge.jtds.jdbc.ParamInfo.getOutValue(ParamInfo.java:159)
at net.sourceforge.jtds.jdbc.JtdsCallableStatement.getOutputValue(JtdsCallableStatement.java:116)
at net.sourceforge.jtds.jdbc.JtdsCallableStatement.getString(JtdsCallableStatement.java:310)
报错信息说得很明白,就是输出结果参数未处理,必须调用getMoreResults()方法以判断是否还有结果集。
然后修改代码,问题解决:
其中改为以下代码也不报错:
执行以下代码,报错:
String querySQL = "{?=call p_sys_manager_csReport(?,?,?,?,?)}";
cstmt = conn.prepareCall(querySQL);
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setInt(2, modType);
cstmt.setInt(3, dptId);
cstmt.setInt(4, eplId);
cstmt.registerOutParameter(5, java.sql.Types.VARCHAR);
cstmt.registerOutParameter(6, java.sql.Types.VARCHAR);
rs = cstmt.executeQuery();
if (rs != null) {
if (rs.next()) {
companyTotal = rs.getInt("companyTotal");
}
}
String temp = null;
temp = cstmt.getString(5);//此行报错
报错信息为:
java.sql.SQLException: Output parameters have not yet been processed. Call getMoreResults().
at net.sourceforge.jtds.jdbc.ParamInfo.getOutValue(ParamInfo.java:159)
at net.sourceforge.jtds.jdbc.JtdsCallableStatement.getOutputValue(JtdsCallableStatement.java:116)
at net.sourceforge.jtds.jdbc.JtdsCallableStatement.getString(JtdsCallableStatement.java:310)
报错信息说得很明白,就是输出结果参数未处理,必须调用getMoreResults()方法以判断是否还有结果集。
然后修改代码,问题解决:
String querySQL = "{?=call p_sys_manager_csReport(?,?,?,?,?)}"; cstmt = conn.prepareCall(querySQL); cstmt.registerOutParameter(1, java.sql.Types.INTEGER); cstmt.setInt(2, modType); cstmt.setInt(3, dptId); cstmt.setInt(4, eplId); cstmt.registerOutParameter(5, java.sql.Types.VARCHAR); cstmt.registerOutParameter(6, java.sql.Types.VARCHAR); rs = cstmt.executeQuery(); if (rs != null) { if(rs.next()) { companyTotal = rs.getInt("companyTotal"); } } String temp = null; /* *记录集获取到后,把rs记录集循环取出后或者调用cstmt.getMoreResults()方法后,sqlserver才会处理output返回值 */ if (!cstmt.getMoreResults()) {//此行判断是否还有更多的结果集,如果没有,接下来会处理output返回参数了 temp = cstmt.getString(5);//此行不再报错 }
其中改为以下代码也不报错:
if (rs != null) { while(rs.next()) {//if改为while companyTotal = rs.getInt("companyTotal"); } } String temp = null; /* * 去掉cstmt.getMoreResults(),将上面的if(rs.next()) 改为while(rs.next())也不报错 */ //if (!cstmt.getMoreResults()) { temp = cstmt.getString(5);//此行不再报错 //}
相关文章推荐
- Java调用SQL Server存储过程同时返回参数和结果集
- Java调用SQL Server存储过程同时返回参数和结果集
- 调用带参数的存储过程,并返回结果集--oracle
- 最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子
- sql存储过程——多结果集返回与java获取
- JAVA调用sqlserver存储过程的实现(返回多个结果集的实现)
- 最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子
- Java调用存储过程二(返回一行或多行结果集)
- OCCI调用带有返回结果集的存储过程,获取结果集中指定列的值
- java调用存储过程无法取得返回参数
- Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】
- PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)
- java调用存储过程返回参数
- JAVA调用ORACLE带数组输入参数和返回游标结果集的存储过程
- Java调用存储过程返回多个结果集
- 存储过程有输出参数,在c#中用nhibernate调用存储过程时,如何才能获取到一个结果集和这个输出参数呢?
- JAVA调用ORACLE的存储过程、函数的返回结果集例子
- java程序调用有参存储过程返回参数
- OCCI调用带有返回结果集的存储过程,获取结果集中指定列的值