通过java调用存储过程(查询,更新,修改,删除),包的一些操作

对存储过程  函数  包的一些学习!

这些都是以前学生时代的时候写的一个工具类JDBCutil.

package com.*****.Oracle;

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Types;

 

import oracle.jdbc.pool.OracleDataSource;

 

/**

 * @author YangJing

 *

 */

publicclass JDBCutil {

   
    //第一种获取oracle数据库连接   [写了两种获取数据库连接的方式]

    publicstatic Connection getConnection(){

       Connection conn = null;

       try {

           Class.forName("oracle.jdbc.OracleDriver");

           conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");

       } catch (ClassNotFoundException e) {

           e.printStackTrace();

       } catch (SQLException e) {

           e.printStackTrace();

       }

       return conn;

    }

    //第二种获取oracle数据库连接

    publicstatic Connection getConnectiontoo(){

       Connection conn = null;

       try {

           OracleDataSource ods = new OracleDataSource();

           String url = "jdbc:oracle:thin:@//127.0.0.1:1521/orcl";

           ods.setURL(url);

           ods.setUser("scott");

           ods.setPassword("tiger");

           conn = ods.getConnection();

       } catch (SQLException e) {

           e.printStackTrace();

       }

       return conn;      

    }

 
//该操作都是对scott用户下的emp表进行的操作
    publicstaticvoid main(String[] args) {

       ResultSet rs = null;

       Connection conn = JDBCutil.getConnection();
      
//执行查询
       try {

           CallableStatement cs = conn.prepareCall(" Select * from emp where empno = 7788");

           rs = cs.executeQuery();

           while(rs.next()){

              System.out.println(rs.getString("empno"));

              System.out.println(rs.getString("ename"));

           }
       } catch (SQLException e) {

           e.printStackTrace();

       }

      
//执行插入
       try {

           CallableStatement cs = conn.prepareCall(" insert into emp(empno) values(7700)");

           cs.executeUpdate();          

       } catch (SQLException e) {

           e.printStackTrace();

       }

      
//执行更新
       try {

           CallableStatement cs = conn.prepareCall(" update emp set sal = sal +100");

           cs.executeUpdate();

       } catch (SQLException e) {

           e.printStackTrace();

       }

      
//执行删除
       try {

           CallableStatement cs = conn.prepareCall(" delete from emp where empno = 7700");

           cs.executeUpdate();

       } catch (SQLException e) {

           e.printStackTrace();

        }

      
//对包中的一个函数print_str_pkg.func_hello进行的操作:最终的输出结果为 Hello  YangJing
       try {

           CallableStatement cs1 = conn.prepareCall("begin ? := print_str_pkg.func_hello(?); end;");

           cs1.registerOutParameter(1, Types.CHAR);

           cs1.setString(2, "YangJing");

           cs1.executeUpdate();

           String result = cs1.getString(1);

           System.out.println(result);

       } catch (SQLException e) {

           e.printStackTrace();

       }

      
//执行的一个存储过程proc_test_001   这个存储过程是一个1到100的和
       try {

           CallableStatement cs1 = conn.prepareCall("begin proc_test_001(?); end;");

           cs1.registerOutParameter(1, Types.CHAR);

           cs1.executeUpdate();

           int result = cs1.getInt(1);

           System.out.println(result);

       } catch (SQLException e) {

           e.printStackTrace();

       }
    }
}



下面是JDBCutil类中用到的存储过程和函数以及包

包 print_str_pkg

包中包含了一个函数func_hello以及一个存储过程proc_hello

--包  print_str_pkg

 --包头
create or replace package print_str_pkg
is
          procedure proc_hello(v_name varchar2);

          function func_hello(v_str varchar2) return varchar2;

 end print_str_pkg;

 --包体
create or replace package body print_str_pkg is

    --存储过程proc_hello  
    procedure proc_hello(v_name varchar2) is

    begin

          dbms_output.put_line('Hello' || '  ' || v_name);

    end proc_hello;

    --  函数  func_hello
    function func_hello(v_str varchar2) return varchar2 is

     begin

              return 'Hello' || '   ' || v_str;

     end func_hello;

begin
     --测试看看三个值谁先输出
     dbms_output.put_line('包是从这儿开始的!');

end print_str_pkg;



 --使用包[在数据库对包的一个测试]
declare

      v_str varchar2(50);

 begin

     --调用包中的存储过程
     print_str_pkg.proc_hello('YangJing!');
  
     --调用包中的函数
     v_str := print_str_pkg.func_hello('Neil!');
 
    dbms_output.put_line(v_str);

end;


存储过程 proc_test_001[该存储过程是进行了个1到100的累加和


--存储过程:proc_test_001

create or replace procedure proc_test_001(v_number out number) is 
  
   v_no number;

  begin

    v_no := 0;
 
   for v_i in 1..100 loop
      
        v_no :=  v_no + v_i;
     
    end loop;

    v_number := v_no;

 end proc_test_001;

--测试对存储过程proc_test_001的调用
declare

      v_number number;

begin 

  proc_test_001(v_number);

  dbms_output.put_line(v_number);

end;
作者:杨静(YangJing)
出处: [杨静の专栏]     ( http://blog.csdn.net/u012141686/article/details/24365303)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值