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( ...
随机推荐
- Memcache基础教程
Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力. 它可以应 ...
- struts2学习笔记之十:文件上传
Struts2的上传 1.Struts2默认采用了apache commons-fileupload 2.Struts2支持三种类型的上传组件 3.需要引入commons-fileupload相关依赖 ...
- 理解 Lua 的那些坑爹特性
按:最近看到了依云的文章,一方面,为Lua被人误解而感到十分难过,另一方面,也为我的好友, 依云没有能够体会到Lua的绝妙和优雅之处而感到很遗憾,因此我写了这篇文章,逐条款地说明了 依云理解中出现的一 ...
- salesforce 零基础学习(三十一)关于LookUp字段点击Save时的Validation
今天在群里大概遇到了这样一个问题,明明这个User存在,但是save的时候提示信息说Value不存在,大概的意思如下图所示,目前认为这种问题常见的可能情况有两种. 一.此字段设置Validation ...
- iOS-国家气象局-天气预报接口等常用接口
接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data/cityinfo/10101 ...
- html5视频全频播放
html5视频全频播放 旋转90度 对video进行缩放 修正position 效果还凑合 代码 $(media).rotate({ // angle: 90, duration: 100, anim ...
- c# BlowFish 高速 对称加密
BlowFish 高速 对称加密 string key = "this is my key"; BlowFish algo = new BlowFish(key); string ...
- 领会CSS,实际中的研究
虽懂却不会,真是可怕,自认懂却了无. 善用CSS属性选择器 在用于区别和唯一的情况下完全可以使用属性选择器,而没有必要使用class或id p[city="http://www.css.co ...
- HTTP协议从入门到大牛,初识HTTP协议(学习笔记)
HTTP数据传输协议 当访问一个网页时,浏览器会向服务器发起一条HTTP请求,接着服务器会去寻找相应的资源,如果请求成功,就会把这个对象,对象类型,对象长度以及其他的信息放在HTTP响应中,发送给客户 ...
- java中Cookie中文字符乱码问题
如果Cookie中的Value 中有中文字符出现,在加入Cookie的时候,会出现下面的错误: java.lang.IllegalArgumentException: Control characte ...