美文网首页
在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调用存储过程

    Java调用存储过程 调用存储过程 调用存储函数 cursor作为out参数返回

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

    1.创建存储过程create or replace procedure query(eno in number,p...

  • PL/SQL之存储过程

    存储过程、存储函数和触发器 存储过程和存储函数定义:指存储在数据库中供所有用户程序调用的子程序叫存储过程或存储函数...

  • Oracle之存储过程与存储函数

    存储过程和存储函数指存储在数据库中供所有用户程序调用的子程序叫存储过程或者存储函数;存储过程和存储函数相同点:完成...

  • mysql基础(三)

    存储过程和函数 存储过程和函数的引入 存储过程和函数是在数据库中定义一些 SQL 语句的集合,然后直接调用这些存储...

  • 4.存储过程(一)

    1. 存储过程和函数概述 存储过程和函数是 事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程和...

  • mysql存储过程

    存储过程和函数 /*存储过程和函数:类似于java中的方法好处:1、提高代码的重用性2、简化操作 */ 存储过程 ...

  • MySQL语法模板 SQL语句:函数、存储过程

    创建函数 创建存储过程 修改函数 修改存储过程 调用 删除函数 删除存储过程

  • 存储过程

    4.1 存储过程和函数概述 存储过程和函数是 事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过...

  • Oracle存储过程与存储函数-入门

    一. 存储过程和存储函数的定义 定义:存储在数据库中,供所有用户程序调用的子程序叫做存储过程/存储函数。复杂点的解...

网友评论

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

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