美文网首页
在java中调用存储过程和存储函数

在java中调用存储过程和存储函数

作者: xhlc02 | 来源:发表于2018-11-11 19:27 被阅读0次

    1.创建存储过程
    create or replace procedure query(eno in number,pename out VARCHAR2,psal out number,pjob out varchar2)
    as
    begin
    --得到该员工的姓名和职位
    select ename,sal,job into pename,psal,pjob from emp where empno=eno;
    end;
    2.创建存储函数
    create or replace function nianshouru(eno in number)
    return number
    as
    --定义变量保存员工的薪水和奖金
    psal emp.sal%type;
    pcomm emp.comm%type;
    begin
    --得到改员工的奖金和月薪
    select sal,comm into psal,pcomm from emp where empno=eno;
    --直接返回年收入
    return psal*12+nvl(pcomm,0);
    end;
    3.创建java工程,并且导入连接数据库的jar包


    image.png

    4.创建JDBCUtils工具类
    package com.xdl.utils;

    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:@localhost:1521:mldn";
    private static String username="scott";
    private static String password ="tiger";
    //注册驱动
    static {
    try {
    Class.forName(driver);

        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError(e);
        }
    }
    public static Connection getConnecction(){
        try {
            return DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
        
    }
    //释放数据库
    public static void release(Connection conn,Statement st,ResultSet rs) {
        if(rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                rs=null;
            }
        }
        if(st!=null) {
            try {
                st.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                st=null;
            }
        }
        if(conn!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                conn=null;
            }
        }
    }
    

    }
    5.创建调用存储过程的测试类
    package com.xdl.oracle;

    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;

    import org.junit.Test;

    import com.xdl.utils.JDBCUtils;

    import oracle.jdbc.OracleTypes;
    /**

    • 调用存储过程
    • @author Administrator

    */
    public class Procedure {
    @Test
    public void testProcedure(){
    String sql="{call query(?,?,?,?)}" ;
    Connection conn=null;
    Statement st=null;
    ResultSet rs=null;
    CallableStatement call=null;
    try {
    //得到一个连接
    conn=JDBCUtils.getConnecction();
    //通过连接创建出statement
    call=conn.prepareCall(sql);
    //对于输入参数需要赋值
    call.setInt(1, 7839);//第一个问号
    //对于out输出参数,申明
    call.registerOutParameter(2, OracleTypes.VARCHAR);//第二个问号
    call.registerOutParameter(3, OracleTypes.NUMBER);
    call.registerOutParameter(4, OracleTypes.VARCHAR);
    //执行调用
    call.execute();
    //取出结果
    String name=call.getString(2);
    double sal=call.getDouble(3);
    String job=call.getString(4);
    System.out.println(name+'\t'+sal+"\t"+job);
    } catch (Exception e) {
    e.printStackTrace();
    }
    finally {
    //关掉,释放资源
    JDBCUtils.release(conn, st, rs);
    }
    }
    }
    6.创建调用存储函数的测试类Function
    package com.xdl.oracle;

    import java.sql.CallableStatement;
    import java.sql.Connection;

    import org.junit.Test;

    import com.xdl.utils.JDBCUtils;

    import oracle.jdbc.OracleTypes;

    /**

    • 调用存储函数
    • @author Administrator

    */
    public class Function {
    @Test
    public void testFunction() {
    String sql="{?=call nianshouru(?)}";//存储函数的名字
    Connection conn=null;
    CallableStatement call=null;
    try {
    //得到数据库连接
    conn=JDBCUtils.getConnecction();
    //基于连接获取到statement
    call=conn.prepareCall(sql);
    //对于输出参数,申明
    call.registerOutParameter(1, OracleTypes.NUMBER);
    //对于输入参数,赋值
    call.setInt(2, 7839);
    //执行调用
    call.execute();
    //取出年收入的结果
    double income=call.getDouble(1);
    System.out.println(income);
    }catch (Exception e) {
    e.printStackTrace();
    }finally {
    //释放资源
    JDBCUtils.release(conn, call, null);
    }
    }
    }

    相关文章

      网友评论

          本文标题:在java中调用存储过程和存储函数

          本文链接:https://www.haomeiwen.com/subject/xlhaxqtx.html