存储过程

JDBC 常用 API
  DriverManager 类 驱劢管理器 , 用于获得 Connection 对象
  Connection 接口  连接对象 , 用于获得获得 Statement 对象
  Statement 用于执行静态 SQL 并可返回结果的对象
  PreparedStatement 继承自 Statement , 预编译的 Sql 语句对象
  CallableStatement 继承自 PreparedStatement , 用于执行存储过程

  ResultSet 查询返回的数据库结果集
  结果集相当于数据库中的游标( cursor )
  next()方法的功能  包括两个劢作:下移一行 , 并判断下一行有没有数据

 

存储过程 && 通过 JDBC API 调用存储过程 *
1)  存储过程( Stored Procedure,简称 SP , 也称为 Procedure , 过程 )存储过程( Stored Procedure )是在大型数据库系统中 , 一组完成特定功能的 SQL 语句集 , 经编译后存储在数据库中 , 用户通过指定存储过程的名字及参数来执行它。
2)  函数( function )
  to_char / nvl / coalesc 等都是 Oracle 数据库的内置函数
  自己写的函数和 Procedure 功能类似 , 类似于 java 中的方法。
  过程和函数都是驻留在数据库中的程序块
  过程可以有返回值也可以没有 , 函数必须有返回值
3)  数据库编程
  在数据库中编译好程序块 , 实现特定的功能
4)  优势:提高效率
  最大限度的减少 I/O
  已经编译过的过程 , 减少编译时间
5)  每条 sql 语句对应一个执行计划( Explain Plan ) , 缓存中保持一定数量的sql 语句解析结果和
它的执行计划

 

数据准备:

1)  创建 user_xxx 表
   create table user_xxx(
           id number(4) ,
           password char(4) ,
           name char(20) ,
           phone char(20) ,
           email varchar2(50)
    ) ;
    insert into user_xxx  values( 1001 , '1234' , 'liucs' , '13600000000' , 'liucs@sina.com' ) ;

 

创建存储过程: 
    create or replace procedure checkUser_xxx(
         p_userid in char ,                                          -- in 表示输入( 入口 , 默认值 )
         p_pwd in char ,
         flag out number                                             -- out 表示输出( 出口 )
    )
    is   v_password char(4) ;                                    -- 定义变量
    begin                                                                  -- begin 和 end 之间为程序体
         select password into v_password from user_xxx  where id = p_userid ;

         if  v_password = p_pwd   then  flag := 1 ;      -- “:=”表示赋值 , "="表示比较

         else   flag := 0 ;
         end if ;
   exception --当出现异常 , 程序会跳到这里执行
        when  others  then    flag := -1 ;                     --flag 赋值
   end ;
   /                                                                          -- "/"表示执行创建过程的语句

 

 ------------------------------------------------------------------------------------------------------------

    create or replace procedure update_emp(
         p_id     in number ,                                          -- in 表示输入( 入口 , 默认值 )
         p_newSalary  in number ,
         flag out number                                             -- out 表示输出( 出口 )
    )
    is                                     

    begin                                                                  -- begin 和 end 之间为程序体
         update emp_xxx  set  salary = p_newSalary  where empno =p_id;

         flag := SQL%ROWCOUNT ;      -- “:=”表示赋值 , "="表示比较

         commit;   

   end ;
   /   

程序中调用存储过程:

public  int  checkUser(User  user){

   int  flag = - 2;

   String  sql =" {call  checkUser_xxx(? ,? ,?)} ";  //调用过程的语法

   String  sql ="{call  update_emp(? ,? ,?)}";  //调用过程的语法

 

  Connetct  conn =DriveManager("url","userId","pwd");

  CallableStatement  call =null;

  try{

       call=conn.prepareCall(sql);//预处理

       call.setInt(1,user.getId());

       call.setString(2,user.getPwd());

       call.setDouble(2,user.getSalary());

       call.registerOutParameter(3,Types.INTEGER);

       call.execute();

       flag = call.getInt(3);  //取得存储过程的返回值 

  }catch(SQLException  e){

        e.printStackTrace();     

  }finally{

        call.close();

        conn.close();

  }

 return  flag;

}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值