servlet调用带有三个再次回到结果集的蕴藏进程

作者: 关于计算机  发布:2019-11-04

java servlet调用带有多少个重临结果集的积累进度,javaservlet

生龙活虎、mysql存储进程

      这里我先说下自身那些效果完成的逻辑及旅途遇见的局地标题。这些蕴藏进度生机勃勃共带多个输入参数,风姿浪漫共涉及到两张表的询问,每种参数都对应查询表中的三个推断,所以意气风发共重返了五个结实集(当然要重临更加多结果集也是雷同的,固然供给判别,就一而再扩充存款和储蓄进程参数,若是无需决断就一向在存款和储蓄进度中,扩张查询的SQL语句就能够)。完结那几个意义还应该有更简明的主意,能够写SQL关联语句询问出两张表的结果,重返一个构成的结果集。小编这里当然是为了贯彻这几个功效,所以把它的完毕复杂化了。继续说下笔者后日在mysql上碰见的一个主题素材,毕竟是何许原因,其实自个儿以后也没弄精晓,写这么些蕴藏进度前,笔者给要查询的表中增添了四个字段,然后改进了四个字段的名目,扩大的字段到未有其余影响,但是校订过名称的字段就出难点了,在java中调用那些蕴藏进度时,就提示那一个字段空头支票。之后我将以此改良过的字段再纠正回去就好了,下边贴存储进度代码。

    1、参数

      in sheetOneAccount varchar(50),in  sheetTwoAccount varchar(50)

   2、代码

 1 BEGIN
 2 /*存储过程*/
 3 declare shareNameIsOrNoExistsVerify varchar(50);
 4    /*验证第一个参数在第一张表中是否存在*/
 5    SELECT  name into shareNameIsOrNoExistsVerify from infosheet
 6     where sheetOneAccount=name;
 7       if(shareNameIsOrNoExistsVerify is not null) THEN
 8            /*这里给返回的查询结果表中增加了一个字段,以便客户端接受到之后,首先取这个字段的
 9 值来判断,查询这个用户是否存在,如果存在才去取对应字段的值,减少了客户端的工作量*/
10                    /*这里nameExists AS 0表示用户存在与表中,而且表示第一张表*/
11         select *, 0 AS nameExists from infosheet where name=sheetOneAccount;
12       ELSE 
13                /*下面查询人员不存在,返回的自定义字段值就为1, 1 AS nameExists,表示查询用户不存在,
14 而且表示第一张表 */
15 
16   /*下面表示没查询到该人员,虽然没查询到但是还是返回了一条数据,所以在取值时,需要先取nameExists 这个字段
17                 判断查询的人员是否存在*/
18        select name,1 AS nameExists from infosheet limit 0,1;
19      end if;
20     /*验证第二个参数在第二张表中是否存在*/
21   set shareNameIsOrNoExistsVerify=null;
22   SELECT  name into shareNameIsOrNoExistsVerify from studentsheet
23     where name=sheetTwoAccount;
24     if(shareNameIsOrNoExistsVerify is not null) THEN
25            /*这里给返回的查询结果表中增加了一个字段,以便客户端接受到之后,首先取这个字段的
26 值来判断,查询这个用户是否存在,如果存在才去取对应字段的值,减少了客户端的工作量*/
27                    /*这里nameExists AS 2表示用户存在于表中,而且表示第二张表*/
28         select *, 2 AS nameExists from studentsheet where name=sheetTwoAccount;
29       ELSE 
30        /*不存在返回的自定义字段值就为3, 3 AS nameExists,表示查询用户不存在,
31 而且表示第二张表 */
32 
33     /*下面表示没查询到该人员,虽然没查询到但是还是返回了一条数据,所以在取值时,需要先取nameExists 这个字段
34                 判断查询的人员是否存在*/
35             select name,3 AS nameExists from studentsheet limit 0,1;
36      end if;
37 END

一、java Servlet

  1、调用存款和储蓄进程方法

 1  //调用带有多个返回结果集的存储过程
 2      //这里虽然是查询的结果集,但是我在数据库中写的判断是,只查询出一条数据,所以也不需要在方法中使用re.next遍历
 3    public static     JSONArray callProcReturnMultipleSet(String sql, String[] parameters) {
 4       JSONArray  masterJSONArray = new JSONArray();
 5      JSONObject shareJSONObject=new JSONObject();
 6        try {
 7            conn = getConnection();

 8            cs = conn.prepareCall(sql);                   
 9              for(int i=0;i<parameters.length;i++)
10                 {
11                  cs.setObject(i+1, parameters[i]); 
12                 }
13              cs.execute();
14             rs = cs.getResultSet();
15             //如果是返回的多条数据这里,需要用JSONArray来接收。
16             shareJSONObject= ResultToJsonTool.resultSetToJsonObject(rs);
17             masterJSONArray.put(shareJSONObject);
18            
19             //下面这个方法就是继续循环出rs中的数据集表,java这个功能做都没.NET好,.NET返回一个dataSet直接用下标取对应的数据集
20             //如果你还在查询中增加了更多的表没那么继续用下面这个方法循环出数据集
21            if (cs.getMoreResults() == true) {
22                 rs = cs.getResultSet();
23                   shareJSONObject= ResultToJsonTool.resultSetToJsonObject(rs);
24                  masterJSONArray.put(shareJSONObject);
25                  //下面如果有第三方那个表,以此类推,同样的方法,或则这里自己可以写一个递归的方法封装下少些代码
26                  //if (cs.getMoreResults() == true) {
27                  
28                 // }
29                 
30             } 
31             
32             
33         }
34         catch (Exception e) {
35             e.printStackTrace();
36             throw new RuntimeException(e.getMessage());
37         }finally{
38            
39         }
40         return masterJSONArray;
41     }

2、调用

1 //调用返回多个结果集的存储过程
2            String[] getResultSetParameter=new String[]{"hang","haha"};
3            String  executProduceStr="call getMultipleResultSetProcudure(?,?)";
4            JSONArray rest=(JSONArray) MySqlHepler.callProcReturnMultipleSet(executProduceStr, getResultSetParameter);
5            out.println(rest.toString());

3、实现截图

            

 

servlet调用带有八个重临结果集的积存进程,javaservlet 风度翩翩、mysql存款和储蓄进程这里本身先说下自家这么些职能实现的逻辑及旅途遇见的局部难题。这...

本文由贝博体育app发布于关于计算机,转载请注明出处:servlet调用带有三个再次回到结果集的蕴藏进程

关键词:

上一篇:没有了
下一篇:没有了