java servlet调用带有多个返回结果集的存储过程
本人开发的开发者技术变现资源聚集地,大家支持下,下面是网址
https://www.baiydu.com
一、mysql存储过程
这里我先说下我这个功能实现的逻辑及途中遇到的一些问题。这个存储过程一共带两个输入参数,一共关联到两张表的查询,每个参数都对应查询表中的一个判断,所以一共返回了两个结果集(当然要返回更多结果集也是一样的,如果需要判断,就继续增加存储过程参数,如果不需要判断就直接在存储过程中,增加查询的SQL语句即可)。实现这个功能还有更简单的方法,可以写SQL关联语句查询出两张表的结果,返回一个组合的结果集。我这里当然是为了实现这个效果,所以把它的实现复杂化了。继续说下我今天在mysql上遇到的一个问题,究竟是什么原因,其实我现在也没弄清楚,写这个存储过程前,我给要查询的表中增加了两个字段,然后修改了一个字段的名称,增加的字段到没有任何影响,但是修改过名称的字段就出问题了,在java中调用这个存储过程时,就提示这个字段不存在。之后我将这个修改过的字段再修改回去就好了,下面贴存储过程代码。
1、参数
in sheetOneAccount varchar(50),in sheetTwoAccount varchar(50)
2、代码
BEGIN
/*存储过程*/
declare shareNameIsOrNoExistsVerify varchar(50);
/*验证第一个参数在第一张表中是否存在*/
SELECT name into shareNameIsOrNoExistsVerify from infosheet
where sheetOneAccount=name;
if(shareNameIsOrNoExistsVerify is not null) THEN
/*这里给返回的查询结果表中增加了一个字段,以便客户端接受到之后,首先取这个字段的
值来判断,查询这个用户是否存在,如果存在才去取对应字段的值,减少了客户端的工作量*/
/*这里nameExists AS 0表示用户存在与表中,而且表示第一张表*/
select *, 0 AS nameExists from infosheet where name=sheetOneAccount;
ELSE
/*下面查询人员不存在,返回的自定义字段值就为1, 1 AS nameExists,表示查询用户不存在,
而且表示第一张表 */ /*下面表示没查询到该人员,虽然没查询到但是还是返回了一条数据,所以在取值时,需要先取nameExists 这个字段
判断查询的人员是否存在*/
select name,1 AS nameExists from infosheet limit 0,1;
end if;
/*验证第二个参数在第二张表中是否存在*/
set shareNameIsOrNoExistsVerify=null;
SELECT name into shareNameIsOrNoExistsVerify from studentsheet
where name=sheetTwoAccount;
if(shareNameIsOrNoExistsVerify is not null) THEN
/*这里给返回的查询结果表中增加了一个字段,以便客户端接受到之后,首先取这个字段的
值来判断,查询这个用户是否存在,如果存在才去取对应字段的值,减少了客户端的工作量*/
/*这里nameExists AS 2表示用户存在于表中,而且表示第二张表*/
select *, 2 AS nameExists from studentsheet where name=sheetTwoAccount;
ELSE
/*不存在返回的自定义字段值就为3, 3 AS nameExists,表示查询用户不存在,
而且表示第二张表 */ /*下面表示没查询到该人员,虽然没查询到但是还是返回了一条数据,所以在取值时,需要先取nameExists 这个字段
判断查询的人员是否存在*/
select name,3 AS nameExists from studentsheet limit 0,1;
end if;
END
一、java Servlet
1、调用存储过程方法
//调用带有多个返回结果集的存储过程
//这里虽然是查询的结果集,但是我在数据库中写的判断是,只查询出一条数据,所以也不需要在方法中使用re.next遍历
public static JSONArray callProcReturnMultipleSet(String sql, String[] parameters) {
JSONArray masterJSONArray = new JSONArray();
JSONObject shareJSONObject=new JSONObject();
try {
conn = getConnection(); cs = conn.prepareCall(sql);
for(int i=0;i<parameters.length;i++)
{
cs.setObject(i+1, parameters[i]);
}
cs.execute();
rs = cs.getResultSet();
//如果是返回的多条数据这里,需要用JSONArray来接收。
shareJSONObject= ResultToJsonTool.resultSetToJsonObject(rs);
masterJSONArray.put(shareJSONObject); //下面这个方法就是继续循环出rs中的数据集表,java这个功能做都没.NET好,.NET返回一个dataSet直接用下标取对应的数据集
//如果你还在查询中增加了更多的表没那么继续用下面这个方法循环出数据集
if (cs.getMoreResults() == true) {
rs = cs.getResultSet();
shareJSONObject= ResultToJsonTool.resultSetToJsonObject(rs);
masterJSONArray.put(shareJSONObject);
//下面如果有第三方那个表,以此类推,同样的方法,或则这里自己可以写一个递归的方法封装下少些代码
//if (cs.getMoreResults() == true) { // } } }
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}finally{ }
return masterJSONArray;
}
2、调用
//调用返回多个结果集的存储过程
String[] getResultSetParameter=new String[]{"hang","haha"};
String executProduceStr="call getMultipleResultSetProcudure(?,?)";
JSONArray rest=(JSONArray) MySqlHepler.callProcReturnMultipleSet(executProduceStr, getResultSetParameter);
out.println(rest.toString());
3、实现截图
由于本人也是才开始学java,如有不合理之处,请及时指出。
本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。
java servlet调用带有多个返回结果集的存储过程的更多相关文章
- Java Servlet调用数据库复习
首先要导入jar包. 剩下的基本就是模版式的代码了: public class main { // JDBC 驱动名及数据库 URL static final String JDBC_DRIVER = ...
- java axis调用带有soap头(soapheader)的.net webservice
使用axis调用.net带soapheader的webservice是如何实现的,现在贴出代码 <?xml version="1.0" encoding="utf- ...
- Oracle 返回结果集的 存储过程
create or replace PROCEDURE SPGETROLELIST ( P_APPCODE IN VARCHAR2 , P_USERROLE IN VARCHAR2 , CUR_RES ...
- 【Mybatis】MyBatis调用带有返回结果、output参数的存储过程上与ibatis的区别
用过mybatis的应该都知道它是ibatis被Google收购后重新命名的一个工程,因此也做了大量升级.本文就来介绍下两者在调用存储过程上的一点区别,ibatis有一个专门的标签<proced ...
- Java 调用存储过程 返回结果集
这里使用Oracle数据库的thin连接. 下面是存储过程SQL 1 createorreplaceprocedure proc3(stid in student.stuid%type, stname ...
- MyBatis调用存储过程,含有返回结果集、return参数和output参数
Ibatis是我们经常使用的O/R映射框架,mybats是ibatis被Google收购后重新命名的一个工程,当然也做了大量的升级.而调用存储过程也是一次额C/S架构模式下经常使用的手段,我们知道,i ...
- (转)java 层调用Jni(Ndk) 持久化c c++ 对象
对于Jni(Ndk) 很多人应该都有印象,Android的ndk接触到的机会相对会比较多,本例子以android平台为例,pc端的话就以简单的windows为例, 编码完用vs 或是 gcc进行编译成 ...
- oracle调用存储过程和函数返回结果集
在程序开发中,常用到返回结果集的存储过程,这个在mysql和sql server 里比较好处理,直接返回查询结果就可以了,但在oracle里面 要 out 出去,就多了一个步骤,对于不熟悉的兄弟们还得 ...
- 存储过程不返回记录集导致ADO程序出错
HRESULT _hr = get_adoEOF(&_result); IsEOF()函数如下:其中ADOCG::_RecordsetPtr m_pRecordset; BOOL IsEOF( ...
随机推荐
- PDO事务处理
PDO事务处理 2014-9-3 10:44:19 By jiancaigege==================================== 概要:将多条sql操作(增删改)作为一个操作单 ...
- Atitit 全屏模式的cs桌面客户端软件gui h5解决方案 Kiosk模式
Atitit 全屏模式的cs桌面客户端软件gui h5解决方案 Kiosk模式 1.1. Kiosk Software广泛用于公共电脑或者嵌入系统,最常用的就是ATM机.自动服务机之类的系统了.,1 ...
- PHP性能优化工具–xhprof安装
PHP性能优化工具–xhprof安装,这里我先贴出大致的步骤: 1.获取xhprof 2.编译前预处理 3.编译安装 4.配置php.ini 5.查看运行结果 那么下面我们开始安装xhprof工具吧: ...
- JS 操作 DOM
定义:文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式 节点:(例如:< ...
- Jenkins的系统设置
1.登录Jenkins进入以下界面: 2.点击 系统管理 3.点击 系统设置 (下图的系统设置是已经设置好的) 4.这里设置主要设置 Jenkins URL (这里我是测试的所以使用默认的)与 邮件的 ...
- java webservice 总结(学会读别人的webservice并且通过代理模式访问)
公司做的系统之间的交互用到了webservice做交互,现在对webservice做一个总结. 1.配置已有的webservice webservice主要包括 xml/json:作为传输数据的格式 ...
- wangEditor——轻量级web富文本框
提示:最新版wangEditor请参见 http://www.wangeditor.com/ 和 https://github.com/wangfupeng1988/wangEditor 交流 ...
- SharePoint Server 2013开发之旅(一):新的开发平台和典型开发场景介绍
我终于开始写这个系列文章,实际上确实有一段时间没有动笔了.最近重新安装了一套SharePoint Server 2013的环境,计划利用工作之余的时间为大家写一点新的东西. SharePoint Se ...
- 启动Genymotion时报错Failed to initialize backend EGL display
在启动Genymotion的时候报错: video card说的是显卡,你的显卡可能不支持 OpenGL2.0,或者你装的驱动有问题. 解决办法:将驱动重新安装一下. 可直接下载一个如“驱动人生“一 ...
- 12个学习 CSS3 网站布局设计的优秀案例
网络上有很多的 CSS 画廊站点供大家对各类网站作品进行打分和评论,每天有数以百计的优秀网站被推荐上面,这对于网页设计师来说是很好的灵感来源.今天,我们选择了15赢得 CSS 设计大奖的优秀作品,帮助 ...