本人开发的开发者技术变现资源聚集地,大家支持下,下面是网址

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调用带有多个返回结果集的存储过程的更多相关文章

  1. Java Servlet调用数据库复习

    首先要导入jar包. 剩下的基本就是模版式的代码了: public class main { // JDBC 驱动名及数据库 URL static final String JDBC_DRIVER = ...

  2. java axis调用带有soap头(soapheader)的.net webservice

    使用axis调用.net带soapheader的webservice是如何实现的,现在贴出代码 <?xml version="1.0" encoding="utf- ...

  3. Oracle 返回结果集的 存储过程

    create or replace PROCEDURE SPGETROLELIST ( P_APPCODE IN VARCHAR2 , P_USERROLE IN VARCHAR2 , CUR_RES ...

  4. 【Mybatis】MyBatis调用带有返回结果、output参数的存储过程上与ibatis的区别

    用过mybatis的应该都知道它是ibatis被Google收购后重新命名的一个工程,因此也做了大量升级.本文就来介绍下两者在调用存储过程上的一点区别,ibatis有一个专门的标签<proced ...

  5. Java 调用存储过程 返回结果集

    这里使用Oracle数据库的thin连接. 下面是存储过程SQL 1 createorreplaceprocedure proc3(stid in student.stuid%type, stname ...

  6. MyBatis调用存储过程,含有返回结果集、return参数和output参数

    Ibatis是我们经常使用的O/R映射框架,mybats是ibatis被Google收购后重新命名的一个工程,当然也做了大量的升级.而调用存储过程也是一次额C/S架构模式下经常使用的手段,我们知道,i ...

  7. (转)java 层调用Jni(Ndk) 持久化c c++ 对象

    对于Jni(Ndk) 很多人应该都有印象,Android的ndk接触到的机会相对会比较多,本例子以android平台为例,pc端的话就以简单的windows为例, 编码完用vs 或是 gcc进行编译成 ...

  8. oracle调用存储过程和函数返回结果集

    在程序开发中,常用到返回结果集的存储过程,这个在mysql和sql server 里比较好处理,直接返回查询结果就可以了,但在oracle里面 要 out 出去,就多了一个步骤,对于不熟悉的兄弟们还得 ...

  9. 存储过程不返回记录集导致ADO程序出错

    HRESULT _hr = get_adoEOF(&_result); IsEOF()函数如下:其中ADOCG::_RecordsetPtr m_pRecordset; BOOL IsEOF( ...

随机推荐

  1. Redis教程(十三):管线详解

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/141.html 一.请求应答协议和RTT: Redis是一种典型的基于C/ ...

  2. Java-接口练习1

    1.(1)编写一个接口ShapePara,要求: 接口中的方法: int getArea():获得图形的面积.int getCircumference():获得图形的周长 (2)编写一个圆类Circl ...

  3. EF架构~基于EF数据层的实现

    回到目录 之前写过关于实现一个完整的EF架构的文章,文章的阅读量也是满大的,自己很欣慰,但是,那篇文章是我2011年写的,所以,技术有些不成熟,所以今天把我的2014年写的EF底层架构公开一下,这个架 ...

  4. atitit。企业的价值观 员工第一 vs 客户第一.docx

    atitit.企业的价值观 员工第一 vs 客户第一.docx 1. 客户第一的说法是错误的,员工优先是正确的,理念与价值观1 1.1. 任何一个组织,应该组织成员优先级要比外部成员高才对1 1.2. ...

  5. js判断函数是否存在、判断是否为函数

    代码: <script type="text/javascript"> //判断是否为函数 try { if(typeof FunName === "func ...

  6. jQuery监听文本框值改变触发事件(propertychange)

    完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  7. dubbo+zookeeper简单环境搭建

    dubbo+zoopeeper例子 [TOC] 标签(空格分隔): 分布式 dubbo dubbo相关 dubbo是目前国内比较流行的一种分布式服务治理方案.还有一种就是esb了.一般采用的是基于Ap ...

  8. Hello Netgen

    Hello Netgen eryar@163.com 摘要Abstract:本文主要介绍如何对下载的Netgen源码进行编译生成Netgen程序和程序开发所需要的库nglib. 关键字Key Word ...

  9. CSS绝对定位的应用

    × 目录 [1]跟随图标 [2]视频提示 [3]下拉菜单[4]边缘对齐[5]星号 [6]全屏适应[7]半区翻图[8]九宫格[9]等高布局[10]整体布局 前面的话 之前的博客文章已经详细介绍过绝对定位 ...

  10. Spring MVC 学习总结(一)——MVC概要与环境配置

    一.MVC概要 MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑.数据.显示分离的方法组织代码,MVC主要作用是降低了视图与业务 ...