java 执行oracle 存储过程_oracle--在java中调用存储过程和存储函数
在java中调用存储过程和存储函数
存储过程:
查询某个员工的姓名 月薪 职位:
create or replace procedure queryempinfo(eno in number,
pename out varchar2,
psal out number,
pjob out varchar2)
as
begin
select ename,sal,empjob into pename,psal,pjob from emp where empno=eno;
end;
存储函数:
--查询某个员工的年收入
create or replace function queryempincome(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;
JDBCUtils:
package 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:@192.168.56.101:1521:orcl";
private static String user = "scott";
private static String password = "tiger";
static{
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
//DriverManager.registerDriver(driver)
}
public static Connection getConnection(){
try {
return DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/*
* 运行Java程序
* java -Xms100M -Xmx200M HelloWorld
*
* 技术方向:
* 1. 性能调优 ---> tomcat
* 2. 故障诊断 ---> 死锁
*/
public static void release(Connection conn,Statement st,ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs = null;// ----> java GC
}
}
if(st != null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
st = null;
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
conn = null;
}
}
}
}
TestOracle:
package demo;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import oracle.jdbc.OracleCallableStatement;
import oracle.jdbc.OracleTypes;
import org.junit.Test;
public class TestOracle {
/*
* create or replace procedure queryempinfo(eno in number,
pename out varchar2,
psal out number,
pjob out varchar2)
*/
@Test
public void testProcedure(){
//{call [(,, ...)]}
String sql = "{call queryempinfo(?,?,?,?)}";
Connection conn = null;
CallableStatement call = null;
try {
conn = JDBCUtils.getConnection();
call = conn.prepareCall(sql);
//对于in参数,赋值
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, call, null);
}
}
/*
* create or replace function queryempincome(eno in number)
return number
*/
@Test
public void testFunction(){
//{?= call [(,, ...)]}
String sql = "{?=call queryempincome(?)}";
Connection conn = null;
CallableStatement call = null;
try {
conn = JDBCUtils.getConnection();
call = conn.prepareCall(sql);
//第一个是out参数
call.registerOutParameter(1, OracleTypes.NUMBER);
//第二个是in参数
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);
}
}
}
在out参数中使用光标
查询某个部门中的所有员工信息 ---> 返回集合
包头
CREATE OR REPLACE PACKAGE MYPAKCAGE AS
type empcursor is ref cursor;
procedure queryEmpList(dno in number, empList out empcursor);
END MYPAKCAGE;
包体
CREATE OR REPLACE PACKAGE BODY MYPAKCAGE AS
procedure queryEmpList(dno in number, empList out empcursor) AS
BEGIN
open empList for select * from emp where deptno=dno;
END queryEmpList;
END MYPAKCAGE;
java代码:
@Test
public void testCursor(){
String sql = "{call MYPAKCAGE.queryEmpList(?,?)}";
Connection conn = null;
CallableStatement call = null;
ResultSet rs = null;
try {
conn = JDBCUtils.getConnection();
call = conn.prepareCall(sql);
//对于in参数,赋值
call.setInt(1, 20);
//对于out参数 申明
call.registerOutParameter(2, OracleTypes.CURSOR);
call.execute();
//取出结果
rs = ((OracleCallableStatement)call).getCursor(2);
while(rs.next()){
//取出一个员工
String name = rs.getString("ename");
double sal = rs.getDouble("sal");
System.out.println(name+"\t"+sal);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtils.release(conn, call, rs);
}
}
光标在JDBCUtils.release(conn, call, rs);语句中被关闭。
java 执行oracle 存储过程_oracle--在java中调用存储过程和存储函数相关推荐
- mysql触发器调用存储过程出错_mysql 触发器中调用存储过程
想要在MYSQL的触发器中调用存储过程,但是IDE提示: 0A000 Not allowed to return a result set from a trigger 触发器代码如下: DELIMI ...
- mysql 子sql中调用存储过程_mysql 子sql中调用存储过程
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- server使用abp中调用存储过程 sql_ASP调用sql server 存储过程详解-附带实例-
ado文档对使用指定属性创建新的 Parameter 对象. 语法 Set parameter = command.CreateParameter (Name, Type, Direction, Si ...
- 在Java中调用存储过程
本文阐述了怎么使用DBMS存储过程.我阐述了使用存储过程的基本的和高级特性,比如返回ResultSet.本文假设你对DBMS和JDBC已经非常熟悉,也假设你能够毫无障碍地阅读其它语言写成的代码(即不是 ...
- java怎么调用存储函数_java中调用存储过程或存储函数的方法
java中调用存储过程或存储函数的方法 1.调用存储过程:CallableStatement clstmt = null;try {clstmt = conn.prepareCall("{c ...
- ibatis mysql存储过程_分步详解 如何在iBatis中调用存储过程
通过iBatis我们可以在数据库表中执行内嵌的insert , delete, update SQL命令.本文中你将看到如何在iBatis中调用存储过程. 我们使用MySQL数据库,并且使用和上一个例 ...
- c efcore.mysql_EF Core在mysql中调用存储过程
EF Core在mysql中调用存储过程,博主找了很多,然而大多都是EF Core+SqlServer的或者EF Core+Oracle的,并没有正对Mysql的Pomelo驱动的,所以查找了一些资料 ...
- mysql存储过程queue_mysql – 在Sequelize中调用输入/输出类型存储过程
我在 MySQL中创建了一个存储过程,它期望一些输入并返回一些输出. 要在MySQL中调用存储过程,我正在运行 CALL createCoupon(1236,321, @message); SELEC ...
- SQL存储过程中调用存储过程返回的表
存储过程pro_A返回一个表集合TableA,在存储过程pro_B中以TableA为数据源再做一重过滤,想实现代码复用,因此原意是在存储过程pro_B中调用存储过程pro_A,但事实发现我们不能写成s ...
最新文章
- 大公司的前端开发地址
- 【Web安全】Web开发中常见的安全误区
- SqlService 数据操作
- 利用Diferencia和Java微服务进行分接比较测试
- 1 HBase 介绍
- fst java_java快速序列化库FST
- egg直接取req_Egg服务器基础功能
- 每天一个linux命令博客nano,11 个鲜为人知的 Linux 命令(1)
- PHP window2003服务和2008服务器上传个别文件访问报错
- SQL Server数据库培训实战视频教程(2天速成版)
- 代理模式---论坛权限控制代理
- 华为薪资等级结构表_2018华为等级工资表一览
- 集装箱号码识别技术在港口的应用
- 分布式系统统一身份认证
- 图像增强算法(持续更新中)
- 《静态时序分析实用方法》第七章翻译
- An attempt was made to call a method that does not exist. The attempt was ma
- TokenGazer《一问到底》第53期:研究员 vs Cocos-BCX
- 仿视频字幕弹幕网站Miko二次元动漫视频网站源码
- CTF--信息技术对抗赛ISCC之安卓逆向分析