java调用存储过程同时获取[返回参数]和[结果集]
来源: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;
/**记录集获取到后,把rs记录集循环取出后或者调用cstmt.getMoreResults()方法后,sqlserver才会处理output返回值
*/
if (!cstmt.getMoreResults()) {//此行判断是否还有更多的结果集,如果没有,接下来会处理output返回参数了temp = cstmt.getString(5);//此行不再报错
}
其中改为以下代码也不报错:
if (rs != null) {while(rs.next()) {//if改为whilecompanyTotal = rs.getInt("companyTotal");}
}
String temp = null;
/** 去掉cstmt.getMoreResults(),将上面的if(rs.next()) 改为while(rs.next())也不报错
*/
//if (!cstmt.getMoreResults()) {temp = cstmt.getString(5);//此行不再报错
//}
java调用存储过程同时获取[返回参数]和[结果集]相关推荐
- Java调用存储过程返回数组
Java调用存储过程: 结合SQL操作与存储过程 create procedure set_death_age(poet VARCHAR2, poet_age NUMBER) poet_id NUMB ...
- Java调用存储过程(返回:简单类型VARCHAR、自定义对象STRUCT、列表数组VARRAY)
ORACLE 存储过程 练习七 数组专题 写在前面的废话 由于工作需要经常用到 ORACLE存储过程 其中数组是不可避免的一组成元素.那么让我们来体会一下 ORACLE存储过程的数组到低是如何使用的. ...
- java使用集合存储过程_详解java调用存储过程并封装成map
详解java调用存储过程并封装成map 发布于 2020-5-1| 复制链接 摘记: 详解java调用存储过程并封装成map 本文代码中注释写的比较清楚不在单独说明,希望能帮助到大 ...
- oracle 定时任务 job 调用存储过程有回到输出参数(含out参数)
oracle 定时任务 job 调用存储过程有返回输出参数(含out参数) 因前台调用一个含有OUT参数的存储过程,同时在JOB里也想调用同一个存储过程,不想将OUT参数去掉重新建一个存储过程再被JO ...
- java调用存储过程之环境测试
----oracle10g ojdbc14.jar ----oracle11g ojdbc6.jar <?xml version="1.0" encoding="U ...
- java:axis2环境下获取方法参数名的另一种方法
java本身提供的方法不能获取方法的参数名的,只能获取每个参数的类型 比如: public String concatString(String param1,String param2){retur ...
- java 调用存储过程structdescriptor,Java调用oracle存储过程,集合入参的正确姿势
这是我工作之前遇到的一个需求,Java调用存储过程,入参是集合.踩了一些坑,决定写个干货,和大家分享下. 项目使用的oracle版本: com.oracle ojdbc6 11.2.0.1.0 sys ...
- oracle调用存储过程输出,oracle中存储过程调用存储过程(带有返回结果集)
在oracle中,存储过程是可以调用存储过程的.其中,被调用的存储过程可以带返回游标的结果集,或者是一个定义的变量,两者都可以,在实现过程中几乎没什么差别.在调用的存储过程,要注意写好对应的游标或者定 ...
- Java 调用存储过程 返回结果集
这里使用Oracle数据库的thin连接. 下面是存储过程SQL 1 createorreplaceprocedure proc3(stid in student.stuid%type, stname ...
最新文章
- cic曲线是什么_贝塞尔曲线基本用法
- 解题报告:Fake Maxpooling(单调队列求矩阵的和)
- 重现2篇Nature中GraPhlAn绘制的超高颜值物种树Cladogram
- crowd counting_[Crowd_Counting]-PGCNet-ICCV2019
- Centos6安装Zabbix3.4
- 语言五子棋无ai程序框图_微软多语言预训练模型T-ULRv2登顶XTREME排行榜
- Facebook 的 PHP 性能与扩展性
- ECMAScript 运算符--逗号运算符
- 叫板抖音,运营商入局短视频
- 人脸对齐(十六)--DenseFA
- 如何安装 chrome 开发版
- 漫画算法python篇pdf_漫画算法:小灰的算法之旅(Python篇)(全彩)
- 电脑无法安装SecoClient
- 【Code】浅谈Pascal转C++
- ftl有三种映射地址_ftl 入门
- 毕业设计 基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别
- MC指令java,我的世界Java版指令有哪些-我的世界Java版常用指令分享-沧浪手游
- csp-j2第四题解
- 【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题
- 编程范式:函数式编程防御式编程响应式编程契约式编程流式编程