JDBC存储过程调用

一、不带参数

 

      public void procedure01() throws SQLException {

            Connection connection = JDBC.getConn();

            CallableStatement callableStatement = connection.prepareCall("{call query_top10()}"); 

            ResultSet resultSet = callableStatement.executeQuery();

            while(resultSet.next()){

                  int num = resultSet.getInt("num");

                  System.out.println(num);

            }

二、带参数


 

create procedure sp_paging

(

currentpage int,

pagesize int,

tname varchar(64),

selections varchar(2000),

conditions varchar(2000),

sortcolumn varchar(64),

sortorder varchar(40),

out totalnum int,

out totalpage int

)

begin

         #临时变量,标记开始查询位置

         declare vstart int default 0;

         #设置起始位置

         set vstart = (currentpage -1)*pagesize;

         #判断是否填写查询列,若未填写则默认使用*

         if selections is null or selections='' then

                     set selections='*';

         end if;

         #判断是否填写查询条件

         if conditions is null or conditions='' then

                     set conditions = '1=1';

         end if;

         #判断是否填写排序列,若未填写则使用默认的排序列

         if sortcolumn is null or sortcolumn='' then

                     set sortcolumn = '_id';

         end if;

         #判断是否给定正确的排序方式,如未规定或者不符合要求

         if lower(sortorder) !='asc' and lower(sortorder) !='desc' then

                     SELECT'hhhhhhhhhh';

                     set sortorder='asc';

         end if;

end;

    

package com.softeem.jdbc.proc;

import java.sql.CallableStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import com.softeem.jdbc1.BaseConn;

public class ProcedureDemo extends BaseConn{//BaseConn 包括连接获取的方法,省略

    public void proc01() throws SQLException{

        //根据存储过程调用命令获取预处理对象

        CallableStatement cs = getConn().prepareCall("{call query_top10()}");

        ResultSet rs = cs.executeQuery();

        while(rs.next()){

            int num = rs.getInt("num");

            String name = rs.getString("name");

            System.out.println(num+"---"+name);

        }

    }
    
public PageUtils procPaging(PageUtils pu) throws SQLException{//PageUtils包含DTO或者实体类

        CallableStatement cs = getConn().prepareCall("{call sp_paging(?,?,?,?,?,?,?,?,?)}");

        cs.setInt(1, pu.getCurrentPage());

        cs.setInt(2, pu.getPageSize());

        cs.setString(3, pu.getTableName());

        cs.setString(4, pu.getSelections());

        cs.setString(5, pu.getCondition());

        cs.setString(6, pu.getSortColumn());

        cs.setString(7, pu.getSortType());

        

        //注册输出参数

        cs.registerOutParameter(8, java.sql.Types.INTEGER);

        cs.registerOutParameter(9, java.sql.Types.INTEGER);

        //执行存储过程

        cs.execute();

        //获取制定位置的输出参数值

        int totalNum = cs.getInt(8);

        int totalPage = cs.getInt(9);

        pu.setTotalNum(totalNum);

        pu.setTotalPage(totalPage);

        

        //声明用于存储查询结果的集合

        List<Object[]> datas = new ArrayList<>();

        

        //获取查询的结果集

        ResultSet rs = cs.getResultSet();

        ResultSetMetaData rsmd = rs.getMetaData();

        int count = rsmd.getColumnCount();

        while(rs.next()){

            Object[] obj = new Object[count];

            for(int i = 0;i<count;i++){

                //获取标签名称(可能是列名称)

                String label = rsmd.getColumnLabel(i+1);

                Object c = rs.getObject(label);

                obj[i] = c;

            }

            datas.add(obj);

        }

        //将查询结果设置到PageUtils中

        pu.setDatas(datas);

        return pu;

    }

    

    public static void main(String[] args) throws SQLException {

        PageUtils pu = new PageUtils();

        pu.setCurrentPage(1);

        pu.setPageSize(2);

        pu.setTableName("department");

//        pu.setSelections("");

//        pu.setCondition("num < 10000");

        pu.setSortColumn("depno");

        pu.setSortType("desc");

        

        pu = new ProcedureDemo().procPaging(pu);

        for (Object[] obj : pu.getDatas()) {

            for (int i = 0; i < obj.length; i++) {

                System.out.print(obj[i]+"  ");

            }

            System.out.println();

        }

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值