oracle的存储过程与存储函数的初步使用

134 篇文章 1 订阅
13 篇文章 0 订阅

java语言利用存储过程和存储函数操作oracle数据库。

一、存储过程的书写

1.首先打开PL/SQL Developer 文件 –>新建—>SQL窗口
开始书写存储过程语句。例子如下

create or replace procedure testJava(name IN VARCHAR ,count OUT NUMBER) 
IS
begin
  SELECT QUANTITY into count FROM JAVATEST WHERE NAMES=name;

  end testJava;

然后执行F8进行编译如果没有报错则说明执行成功。

书写java代码

这是一个获取Connection的工具类,大家可以随时调用

package com.test.demo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUtils {
    private static String driver="oracle.jdbc.OracleDriver";
    private static String url="jdbc:oracle:thin:@db.xxx.com:8089/数据库名称";
    private static String user="用户名";
    private static String password="密码";
    static {
        //注册驱动
            try {
                Class.forName(driver);
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

    }
    public static Connection getConnection(){
        /**
         * 1、性能优化
         * 2、故障诊断:死锁(ThreadDump
         *                  Oracle:自动处理)
         */
        try {
            return DriverManager.getConnection(url, user, password);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    public static void release(Connection con,Statement st,ResultSet set){
        if(set!=null){
            try {
                set.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finally{
                set=null;
            }
            if(st!=null){
                try {
                    st.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                finally{
                    st=null;///---java的垃圾回收
                }
                try {
                    con.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                finally{
                    con=null;
                }
            }
        }
    }


}

测试函数

@Test
    public void TestProduce(){
        //{(call <procedure-name>[(<arg1>,<arg2>,<arg3>)])}
        //下边这句是sql语句  call开头  存储过程的别名作为方法名参数列表对应   in为输入参数,out为输出参数
        String sql="{call testJava(?,?)}";
        Connection con=null;
        CallableStatement call=null;
        con=JDBCUtils.getConnection();
        try {
            call=con.prepareCall(sql);
            //对于in参数的输入类型  一般先进行赋值
            call.setString(1, "dddd");//将第一个参数设置为dddd

            //对于out参数,申明他是输出参数
            call.registerOutParameter(2,OracleTypes.NUMBER);
            //call.registerOutParameter(3, OracleTypes.NUMBER);

            //执行
            call.execute();

            //输出c
            int quantity = call.getInt(2);
            System.out.println(quantity+"");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally{
            JDBCUtils.release(con, call, null);
        }

        JDBCUtils.release(con, call, null);
    }

存储函数的书写

1、
1.首先打开PL/SQL Developer 文件 –>新建—>SQL窗口
开始书写存储过程语句。例子如下

create or replace function queryQuantity(name in varchar)
return number
is
--定义要要查询的人员的数量
       mquantity  JAVATEST.QUANTITY%TYPE;
  begin
    --获取数量
    select QUANTITY INTO mquantity from JAVATEST WHERE NAMES=name;
    --返回查询数据
    return  mquantity;

    end queryQuantity;

书写java代码

@Test
    public void testFunction(){
        //(?=call <procedure-name>[(<arg1>,<arg2>,<arg3>)])
        //由于是存储函数,所以在call关键字之前要有参数?来接收数据。
        String sql="{?=call queryQuantity(?)}";
        //对于输入参数,一般都是进行赋值,
        //对于输出参数out (该例子没有输出参数)
        Connection con=null;
        CallableStatement call=null;
        con=JDBCUtils.getConnection();
        try {
            call=con.prepareCall(sql);
            //参数1就是sql语句中的?的位置,另外registerOutParameter参数就是为了声明接收参数
            call.registerOutParameter(1, OracleTypes.VARCHAR);
            call.setString(2, "pingdingshanxueyuan");
            //执行
            call.execute();
            //取出输出的数据,参数为sql语句的?的位置相当于接收数据
            int i = call.getInt(1);
            System.out.println(i+"");

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uniquewdl

匆忙的人生,总有你喜欢的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值