Oracle系列:(33)JDBC访问Oracle的存储过程和存储函数
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,1、存储过程1.1、准备SQL-- 定义存储过程create or replace procedure get_rax(salary in number,rax out number)as --
千家信息网最后更新 2026年11月02日Oracle系列:(33)JDBC访问Oracle的存储过程和存储函数1、存储过程
1.3、编写工具类
1.4、JDBC程序调用存储过程
2.2、JDBC程序调用存储函数
1、存储过程
1.1、准备SQL
-- 定义存储过程create or replace procedure get_rax(salary in number,rax out number)as --需要交税的钱 bal number;begin bal := salary - 3500; if bal<=1500 then rax := bal * 0.03 - 0; elsif bal<=4500 then rax := bal * 0.1 - 105; elsif bal<=9000 then rax := bal * 0.2 - 555; elsif bal<=35000 then rax := bal * 0.25 - 1005; elsif bal<=55000 then rax := bal * 0.3 - 2755; elsif bal<=80000 then rax := bal * 0.35 - 5505; else rax := bal * 0.45 - 13505; end if;end;/set serveroutput on;-- 调用存储过程declare sal number := &salary; rax number;begin get_rax(sal,rax); dbms_output.put_line(sal || '元工资应该交税' || rax || '元');end;/
1.2、准备JAR包
| oracle | ojdbc5.jar |
| c3p0 | c3p0-0.9.1.2.jar c3p0-config.xml |
c3p0-config.xml
jdbc:oracle:thin:@127.0.0.1:1521:orcl oracle.jdbc.driver.OracleDriver scott tiger 3 6 1000
1.3、编写工具类
JDBCUtils.java
package com.rk.utils;import java.sql.Connection;import com.mchange.v2.c3p0.ComboPooledDataSource;public class JDBCUtils { private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); public static Connection getConnection() throws Exception{ return dataSource.getConnection(); } public static void closeQuietly(AutoCloseable ac){ if(ac != null){ try { ac.close(); } catch (Exception e) { e.printStackTrace(); } } }}1.4、JDBC程序调用存储过程
CallProc.java
package com.rk.test;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.Types;import com.rk.utils.JDBCUtils;/** * 演示java-jdbc调用oracle过程 */public class CallProc { public static void main(String[] args) throws Exception{ String sql = "{call get_rax(?,?)}"; Connection conn = JDBCUtils.getConnection(); CallableStatement cstmt = conn.prepareCall(sql); //为第一个?号设置值,从1开始 cstmt.setInt(1, 7000); //为第二个?注册输出类型 cstmt.registerOutParameter(2, Types.INTEGER); //执行调用过程 cstmt.execute(); //接收过程的返回值,即第二个?号 int rax = cstmt.getInt(2); //显示 System.out.println("7000元工资应该交税"+rax+"元"); JDBCUtils.closeQuietly(cstmt); JDBCUtils.closeQuietly(conn); }}2、存储函数
2.1、准备SQL
--定义函数create or replace function findEmpNameAndJobAndSal(pempno in number,pjob out varchar2,psal out number) return varchar2as pename emp.ename%type;begin select ename,job,sal into pename,pjob,psal from emp where empno = pempno; return pename;end;/--调用函数declare pename emp.ename%type; pjob emp.job%type; psal emp.sal%type;begin pename := findEmpNameAndJobAndSal(7788,pjob,psal); dbms_output.put_line('7788'||'--'||pename||'--'||pjob||'--'||psal);end;/2.2、JDBC程序调用存储函数
package com.rk.test;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.Types;import com.rk.utils.JDBCUtils;/** * 演示java-jdbc调用oracle函数 */public class CallFunc { public static void main(String[] args) throws Exception { String sql = "{? = call findEmpNameAndJobAndSal(?,?,?)}"; Connection conn = JDBCUtils.getConnection(); CallableStatement cstmt = conn.prepareCall(sql); //为第一个?注册输出类型 cstmt.registerOutParameter(1, Types.VARCHAR); //为第二个?注入值 cstmt.setInt(2, 7788); //为第三个?注册输出类型 cstmt.registerOutParameter(3, Types.VARCHAR); //为第四个?注册输出类型 cstmt.registerOutParameter(4, Types.INTEGER); //执行函数调用 cstmt.execute(); //分别获取1,3,4占位符的值 String ename = cstmt.getString(1); String job = cstmt.getString(3); int sal = cstmt.getInt(4); //显示 System.out.println("7788--"+ename+"--"+job+"--"+sal); JDBCUtils.closeQuietly(cstmt); JDBCUtils.closeQuietly(conn); }}
过程
函数
存储
类型
输出
准备
工资
程序
演示
三个
工具
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
耶加雪菲
百单网互联网科技有限公司
互联网科技图片
互联网科技保险
互联网是不是新科技
互联网科技社
万易互联网科技
杭州互联网科技公司
互联网女皇 腾讯科技
万达互联网科技
齐家互联网科技有限公司
广州优美互联网科技
重庆威客帮互联网科技
互联网时代科技改变生活
湖北码尼互联网科技有限公司电话
江阴互联网智能科技产品进口
搜狐科技互联网
天津腾达互联网科技有限公司
互联网科技如何创业
中国主要互联网科技公司
上海睿民互联网科技有限公司
互联网科技行业发展
互联网 科技创新
睿民互联网科技
友谊互联网络科技
西藏七维空间互联网科技有限公司
现代互联网科技股
栖莱科技互联网股份有限公司
来此购互联网科技有限公司
如何创新互联网科技