java调用存储过程 参数类型_Java 调用存储过程、函数

本文详细介绍了如何使用Java调用Oracle的存储过程,包括无返回值的存储过程、带有输出参数的存储过程以及返回列表的存储过程。同时,文章也展示了Java调用Oracle函数的方法,包括返回单个值和游标的情况。通过实例代码,阐述了参数传递、游标处理等关键步骤。
摘要由CSDN通过智能技术生成

一、Java调用存储Oracle存储过程

测试用表:

--创建用户表

create tableUSERINFO

(

usernameVARCHAR2(50) not null,

passwordVARCHAR2(50) not null,

emailVARCHAR2(50) not null)

1、调用输入参数的存储过程,无返回值

--添加用户记录

create or replace procedure pro_userinfo_insert(username VARCHAR2,password VARCHAR2,email VARCHAR2) is

begin

INSERT INTO userinfo VALUES(username,password,email);COMMIT;end pro_userinfo_insert;

调用

//省略jdbc其他代码//调用存储过程

CallableStatement call = con.prepareCall("{call pro_userinfo_insert(?,?,?)}");//传递参数

call.setString(1, "wangwu");

call.setString(2, "123123");

call.setString(3, "wangwu@163.com");//执行方法,调用存储过程

int result =call.executeUpdate();//返回受影响的行数

System.err.println(result);

2、调用带输出参数的存储过程,返回单个值

--获取用户的记录总数

create or replace procedurepro_userinfo_SelectCount(

v_count OUTINT)is

begin

SELECT COUNT(*) INTO v_count FROMUserinfo;end pro_userinfo_SelectCount;

调用代码

//调用存储过程

CallableStatement call = con.prepareCall("{call pro_userinfo_selectcount(?)}");//传递参数

call.registerOutParameter(1, Types.INTEGER);

call.execute();

System.out.println(call.getInt(1));

注意,这里的proc.getInt(1)中的数值1并非任意的,而是和存储过程中的out列对应的,如果out是在第二个位置,那就是proc.getInt(2),如果是第三个位置,就是proc.getInt(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。

3、返回列表的存储过程

由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分。

创建游标类型:

--声明一个包,在包中声明公共的游标类型

create or replace package shop_package IS

--声明一个游标类型

TYPE ref_cursor IS REF CURSOR;end shop_package;

创建带游标的存储过程:

--带输出游标的存储过程,参数类型为刚才创建的包中的游标类型

create or replace procedure pro_userinfo_select(cur OUT shop_package.ref_cursor) is

begin

--游标进行绑定查询的sql语句

OPEN cur FOR SELECT * FROMuserinfo;end pro_userinfo_select;

Java调用代码

//调用存储过程

CallableStatement call = con.prepareCall("{call pro_userinfo_select(?)}");//设置输出参数类型为游标类型

call.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);

call.execute();//将游标类型转换为数据集,然后遍历数据集即可

ResultSet rs = (ResultSet) call.getObject(1);

System.out.println("姓名\t\t邮箱");while(rs.next()){

System.out.println(rs.getString(1) + "\t\t" + rs.getString(3));

}

二、Java调用函数

1、调用函数,返回单个值

--根据用户名称获取Email函数,返回字符串格式

create or replace function fun_userinfo_selectEmail(v_username varchar2)return varchar2

isv_emailVARCHAR2(50);begin

SELECT email INTO v_email FROM Userinfo WHERE username=v_username;return(v_email);end fun_userinfo_selectEmail;

Java调用

//调用函数

CallableStatement call = con.prepareCall("{?=call fun_userinfo_selectemail(?)}"); //这里必须使用{},否则会报错!//设置参数,1为函数返回值,2为传递到函数中的参数

call.registerOutParameter(1, Types.VARCHAR);

call.setString(2, "zhangsan");

call.execute();

System.out.println(call.getString(1));

2、调用返回游标的函数

--返回游标类型的函数,游标为前面在包中定义的游标类型

create or replace function fun_userinfo_select return shop_package.ref_cursor isref_cur shop_package.ref_cursor;begin

OPEN ref_cur FOR SELECT * FROMuserinfo;return(ref_cur);end fun_userinfo_select;

Java调用

//调用函数

CallableStatement call = con.prepareCall("{?=call fun_userinfo_select()}");//设置返回值类型为游标

call.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);

call.execute();

ResultSet rs= (ResultSet) call.getObject(1);

System.out.println("姓名\t\t邮箱");while(rs.next()){

System.out.println(rs.getString(1) + "\t\t" + rs.getString(3));

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值