如何在Java程序中调用存储过程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何在Java程序中调用存储过程(一)?

(1)使用scott/tiger用户在Oracle中创建2个表并插入几条数据。

Create table carl_test(A varchar2(200));

create table carl_test1(B varchar2(200));

--insert some data into carl_test1 table

insert into carl_test1 values('carl1');

insert into carl_test1 values('carl2');

insert into carl_test1 values('carl3');

commit;

(2)使用scott/tiger用户在Oracle中创建一个测试存储过程,该存储

过程有三个参数,第一个参数为输入参数,最后两个参数为输出参数。为简单起见,没有在该存储过程中加入异常捕获机制。

CREATE OR REPLACE PROCEDURE carl_sp_test

( v_monthly IN varchar2,

last_inserted_rows_num OUT number,

all_effected_rows_num OUT number)

IS

BEGIN

/*删除carl_test表中所有记录*/

delete carl_test;

/*将删除行数赋值给总影响行数*/

all_effected_rows_num := SQL%Rowcount;

commit;

/*将用户输入参数插入carl_test表中*/

insert into carl_test(a) values(v_monthly);

all_effected_rows_num:= all_effected_rows_num + SQL%Rowcount;

/*将表carl_test1中的所有记录插入到carl_test1中*/

insert into carl_test

select* from carl_test1;

/*获得影响记录数*/

last_inserted_rows_num:=SQL%Rowcount;

all_effected_rows_num:= all_effected_rows_num + SQL%Rowcount;

commit;

END carl_sp_test;

(3)使用scott/tiger用户在SQL/Plus中测试上述存储过程

SQL> variable all_effected_rows_num number;

SQL> variable last_inserted_rows_num number;

SQL> exec carl_sp_test('first var',:last_inserted_rows_num,:all_effected_rows_num);

PL/SQL procedure successfully completed

last_inserted_rows_num

---------

3

all_effected_rows_num

---------

4

SQL> print last_inserted_rows_num;

last_inserted_rows_num

---------

3

SQL> print all_effected_rows_num;

all_effected_rows_num

---------

4

SQL>

上述结果表示测试成功

(4)使用下面的Java类TestStoreProcedure.java测试存储过程。

package test;

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import oracle.jdbc.OracleTypes;

/**

* This class is used to test Oracle store procedure

* @author CarlWu

*

*/

public class TestStoreProcedure{

/**

* 测试主方法

* @param args

*/

public static void main(String[] args) {

Connection con=null;

try {

//获得数据库连接

ng.Class.forName("oracle.jdbc.driver.OracleDriver");

con = DriverManager.getConnection("jdbc:oracle:thin:scott/tiger@localhost:1521:LEGDB");

//测试存储过程

TestStoreProcedure sp=new TestStoreProcedure();

sp.execute(con,"carl_sp_test","carl");

} catch (ClassNotFoundException cnfe) {

cnfe.printStackTrace();

} catch (SQLException sqlE) {

sqlE.printStackTrace();

}catch(Exception e){

e.printStackTrace();

}finally {

if (con != null) {

try {

con.close();

} catch (Exception e) {

}

}

}

}

相关文档
最新文档