在JAVA中怎么调用带参数的存储过程?

Python017

在JAVA中怎么调用带参数的存储过程?,第1张

JDBC调用存储过程: CallableStatement\x0d\x0a在Java里面调用存储过程,写法那是相当的固定:\x0d\x0aClass.forName(....\x0d\x0aConnection conn = DriverManager.getConnection(....\x0d\x0a/**\x0d\x0a*p是要调用的存储过程的名字,存储过程的4个参数,用4个?号占位符代替\x0d\x0a*其余地方写法固定\x0d\x0a*/\x0d\x0aCallableStatement cstmt = conn.prepareCall("{call p(?,?,?,?)}")\x0d\x0a/**\x0d\x0a*告诉JDBC,这些个参数,哪些是输出参数,输出参数的类型用java.sql.Types来指定\x0d\x0a*下面的意思是,第3个?和第4个?是输出参数,类型是INTEGER的\x0d\x0a*Types后面具体写什么类型,得看你的存储过程参数怎么定义的\x0d\x0a*/\x0d\x0acstmt.registerOutParameter(3, Types.INTEGER)\x0d\x0acstmt.registerOutParameter(4, Types.INTEGER)\x0d\x0a/**\x0d\x0a*在我这里第1个?和第2个?是输入参数,第3个是输出参数,第4个既输入又输出\x0d\x0a*下面是设置他们的值,第一个设为3,第二个设为4,第4个设置为5\x0d\x0a*没设第3个,因为它是输出参数\x0d\x0a*/\x0d\x0acstmt.setInt(1, 3)\x0d\x0acstmt.setInt(2, 4)\x0d\x0acstmt.setInt(4, 5)\x0d\x0a//执行\x0d\x0acstmt.execute()\x0d\x0a//把第3个参数的值当成int类型拿出来\x0d\x0aint three = cstmt.getInt(3)\x0d\x0aSystem.out.println(three)\x0d\x0a//把第4个参数的值当成int类型拿出来\x0d\x0aint four = cstmt.getInt(4)\x0d\x0aSystem.out.println(four)\x0d\x0a//用完别忘给人家关了,后开的先关\x0d\x0acstmt.close()\x0d\x0aconn.close()\x0d\x0a\x0d\x0aJDBC调用存储过程,掌握这一个程序足够了.\x0d\x0a以下是上面程序使用的存储过程的代码,我用的是Oracle数据库,不过不论是什么数据库,对于你的程序,JDBC这一端写法都是一样的.\x0d\x0a\x0d\x0acreate or replace procedure p\x0d\x0a(v_a in number,v_b number,v_ret out number,v_temp in out number)\x0d\x0ais\x0d\x0abegin\x0d\x0aif(v_a >v_b) then\x0d\x0av_ret := v_a\x0d\x0aelse\x0d\x0av_ret := v_b\x0d\x0aend if\x0d\x0av_temp := v_temp + 1\x0d\x0aend

1、操作系统:windows 2000 Server

2、数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版

3、安装路径:C:\ORACLE

实现方法:

1、  创建一个文件为TEST.java

public class TEST

{

public static void main (String args[])

{

System.out.PRintln("HELLO THIS iS A JAVA PROCEDURE")

}

}

2、  javac TEST.java

3、  java TEST

4、  SQL>conn system/manager

SQL>grant create any Directory to scott

SQL>conn scott/tiger

SQL>create or replace directory test_dir as 'd:\'

目录已创建。

SQL>create or replace java class using bfile(test_dir,'TEST.CLASS')

2 /

Java 已创建。

SQL>select object_name,object_type,STATUS from user_objects

SQL>create or replace procedure test_java

as language java

name 'TEST.main(java.lang.String[])'

/

过程已创建。

SQL>set serveroutput on size 5000

SQL>call dbms_java.set_output(5000)

调用完成。

SQL>execute test_java

HELLO THIS iS A JAVA PROCEDURE

PL/SQL 过程已成功完成。

SQL>call test_java()

HELLO THIS iS A JAVA PROCEDURE

调用完成。