java 操作cursor数据库_Java连接各种数据库以及调用存储过程

本文介绍如何在Oracle中创建不同类型的存储过程,包括无返回值、返回非列表值及返回结果集的存储过程,并演示了如何使用Java进行调用。

准备工作:

1. 创建表

drop table T_TEST_PROCEDURE cascade constraints;

/*==============================================================*/

/*

Table: T_TEST_PROCEDURE

*/

/*==============================================================*/

create

table T_TEST_PROCEDURE (

ID

NUMBER(19) not null,

NAME

VARCHAR2(40),

AGE NUMBER(3),

constraint

PK_T_TEST_PROCEDURE primary key (ID)

);

2. 创建存储过程

无返回值的存储过程

CREATE OR REPLACE PROCEDURE

proctest (

ID IN NUMBER,

NAME IN VARCHAR2,

age

IN NUMBER

)

AS

BEGIN

INSERT INTO

t_test_procedure

(ID, NAME, age

)

VALUES (ID, NAME, age

);

END

proctest;

/

有非列表返回值的存储过程

CREATE OR REPLACE PROCEDURE

proc_returnnolist (

p_id IN INTEGER,

p_name OUT

VARCHAR2,

p_age OUT INTEGER

)

AS

BEGIN

SELECT NAME,

age

INTO p_name, p_age

FROM t_test_procedure

WHERE ID =

p_id;

END proc_returnnolist;

/

返回结果集的存储过程

要返回结果集,需要使用Oracle的package

CREATE OR REPLACE PACKAGE

test_proc_package

AS

TYPE testproccursor IS REF CURSOR;

END

test_proc_package;

存储过程

CREATE OR REPLACE PROCEDURE

proc_returnlist (

testproccursor OUT

test_proc_package.testproccursor

)

AS

BEGIN

OPEN

testproccursor

FOR

SELECT *

FROM

t_test_procedure;

END proc_returnlist;

/

用Java调用存储过程

1. 调用无返回值的存储过程

CallableStatement callableStmt =

con

.prepareCall("{call

proctest(?,?,?)}");

callableStmt.setInt(1,

2);

callableStmt.setString(2, "Stephen");

callableStmt.setInt(3,

27);

callableStmt.execute();

callableStmt.close();

System.out.println("Success");

2. 调用返回非列表的存储过程

CallableStatement callableStmt =

con

.prepareCall("call

proc_returnnolist(?,?,?)");

callableStmt.setInt(1,

3);

callableStmt.registerOutParameter(2,

Types.VARCHAR);

callableStmt.registerOutParameter(3,

Types.INTEGER);

callableStmt.execute();

String name =

callableStmt.getString(2);

int age = callableStmt.getInt(3);

callableStmt.close();

System.out.println("name:" + name + " age:" +

age);

3. 调用返回结果集的存储过程

CallableStatement callableStmt =

con

.prepareCall("call

proc_returnlist(?)");

callableStmt.registerOutParameter(1,

OracleTypes.CURSOR);

callableStmt.execute();

ResultSet rs =

(ResultSet) callableStmt.getObject(1);

while (rs.next())

{

System.out.println("name:" + rs.getString("name") + "

age:"

+

rs.getInt("age"));

}

rs.close();

callableStmt.close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值