Oracle系列:(33)JDBC访问Oracle的存储过程和存储函数
发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,1、存储过程1.1、准备SQL-- 定义存储过程create or replace procedure get_rax(salary in number,rax out number)as --
千家信息网最后更新 2024年11月22日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安全错误
数据库的锁怎样保障安全
上海土地软件开发
黑玛网络技术有限公司
贵阳网络安全警察
app软件开发分层
大渡口应用软件开发
非关系型数据库的当前应用
hive添加分区数据库
微服天下网络技术有限公司
提升服务器安全性的方法
零售软件开发平台
品牌样机软件开发
软件开发业务计划书
数据服务器配置
光伏网络安全管理
深澜 认证服务器
服务器被黑客攻击文件被锁
办公室网络安全应急预案演练
计算机网络技术的就业分析
网络安全四小项会是哪四个
我的世界怎么来到服务器页面
上海软件开发工程师培训
合肥政务软件开发多少钱
msql数据库性能监控
互联网大数据和科技金融
cs1.6广东服务器
手机网络安全的概念
hp网络打印服务器
博兴瓷砖软件开发服务
办公室网络安全应急预案演练
安徽网络技术开发概况