让你 Oracle 的存储过程与Java代码开始进行交互
2017-04-06 15:53
260 查看
Oracle 存储过程定义格式如下:
sql 代码
CREATE OR REPLACE PROCEDURE PRO_YOUR_PROCEDURE (
ELEMENT_01 IN ELEMENT_TYPE, --COMMENTS
....... .... ..... ....
ELEMENT_0S OUT ELEMENT_TYPE, --COMMENTS
.... ... ... ....
)
AS
ARGUMENT_01 ARGUMENT_TYPE(ARGUMENT_RANGE);
...................
BEGIN
--AND YOUR CODE HERE !
END;
EXCEPTION
WHEN
OTHERS
THEN
RAISE_APPLICATION_ERROR(-20003,[YOUR EXCEPITON MESSAGE HERE !]);
END;
COMMIT;--IF YOUR WANT , JUST DO SO !
END PRO_YOUR_PROCEDURE;
其中,[RAISE_APPLICATION_ERROR(-20003,[YOUR EXCEPITON MESSAGE HERE !]);]中的“-20003”是 Oracle 提供的用于用户进行错误自定义的扩充代码。其值可以随便定义,但是也有范围: -20000 到-20999的负整数。
注意到,在存储过程的参数定义中除了IN外,还有个OUT,IN类型的参数是很好理解的,其目的是为了让存储过程接收参数。那么OUT也就不难理解,他的职责就是提供存储过程执行过后的返回值并将其返回给调用者供其使用。
要用Java调用存储过程必须引用“import oracle.jdbc.OracleCallableStatement;”类。
Java调用存储过程的基本格式如下所示:
java 代码
public RETURN_TYPE METHOD_NAME(ARGUMENTS,...)throws EXCEPTIONS...{
conn=...;//建立数据库连接
conn.setAutoCommit(false);//
OracleCallableStatement cal = null;
try{
cal = (OracleCallableStatement) conn.getMetaData().getConnection().prepareCall("call PRO_YOURS(?,...)");
//如果你的数据是一堆记录集那么你可能会用下面的方式
for(int i=0;i<...;i++){
cal.setString(1,arguments);
… … … … … … … … … …
cal.registerOutParameter(n,Types.VARCHAR);
String messages=( (OracleCallableStatement) cal).getString(n);
}
}catch(Exception e){
try {
conn.rollback();
}catch(SQLException ex){}
}catch(...){...............}finally{
… … … … … …
… … … … … …
}
}
其中,conn.getMetaData().getConnection().prepareCall("call PRO_YOURS(?,...)");是存储过程的Java调用声明。
cal.setString(1,arguments);是往存储过程中传入参数
(OracleCallableStatement) cal).getString(n)是从存储过程中得到执行后的返回值,但是,在此之前,你必须使用cal.registerOutParameter(n,Types.VARCHAR);进行声明
sql 代码
CREATE OR REPLACE PROCEDURE PRO_YOUR_PROCEDURE (
ELEMENT_01 IN ELEMENT_TYPE, --COMMENTS
....... .... ..... ....
ELEMENT_0S OUT ELEMENT_TYPE, --COMMENTS
.... ... ... ....
)
AS
ARGUMENT_01 ARGUMENT_TYPE(ARGUMENT_RANGE);
...................
BEGIN
--AND YOUR CODE HERE !
END;
EXCEPTION
WHEN
OTHERS
THEN
RAISE_APPLICATION_ERROR(-20003,[YOUR EXCEPITON MESSAGE HERE !]);
END;
COMMIT;--IF YOUR WANT , JUST DO SO !
END PRO_YOUR_PROCEDURE;
其中,[RAISE_APPLICATION_ERROR(-20003,[YOUR EXCEPITON MESSAGE HERE !]);]中的“-20003”是 Oracle 提供的用于用户进行错误自定义的扩充代码。其值可以随便定义,但是也有范围: -20000 到-20999的负整数。
注意到,在存储过程的参数定义中除了IN外,还有个OUT,IN类型的参数是很好理解的,其目的是为了让存储过程接收参数。那么OUT也就不难理解,他的职责就是提供存储过程执行过后的返回值并将其返回给调用者供其使用。
要用Java调用存储过程必须引用“import oracle.jdbc.OracleCallableStatement;”类。
Java调用存储过程的基本格式如下所示:
java 代码
public RETURN_TYPE METHOD_NAME(ARGUMENTS,...)throws EXCEPTIONS...{
conn=...;//建立数据库连接
conn.setAutoCommit(false);//
OracleCallableStatement cal = null;
try{
cal = (OracleCallableStatement) conn.getMetaData().getConnection().prepareCall("call PRO_YOURS(?,...)");
//如果你的数据是一堆记录集那么你可能会用下面的方式
for(int i=0;i<...;i++){
cal.setString(1,arguments);
… … … … … … … … … …
cal.registerOutParameter(n,Types.VARCHAR);
String messages=( (OracleCallableStatement) cal).getString(n);
}
}catch(Exception e){
try {
conn.rollback();
}catch(SQLException ex){}
}catch(...){...............}finally{
… … … … … …
… … … … … …
}
}
其中,conn.getMetaData().getConnection().prepareCall("call PRO_YOURS(?,...)");是存储过程的Java调用声明。
cal.setString(1,arguments);是往存储过程中传入参数
(OracleCallableStatement) cal).getString(n)是从存储过程中得到执行后的返回值,但是,在此之前,你必须使用cal.registerOutParameter(n,Types.VARCHAR);进行声明
相关文章推荐
- Java中调用Oracle中的存储过程的单元测试代码
- Java代码调用Oracle的存储过程,存储函数和包
- Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】
- 用java代码编写Oracle存储过程
- oracle实现存储过程的分页并用java代码调用存储过程
- Oracle中的JAVA存储过程 另两方法
- 转 ORACLE高效分页存储过程代码
- 如何在JAVA程序中使用Struct一次传入多条数据给Oracle的存储过程。
- oracle查看所有函数或存储过程的代码
- ORACLE高效分页存储过程代码
- C#利用存储过程进行高速分页[包括前台和后台代码]
- oracle查看所有函数或存储过程的代码
- Java调用Oracle的存储过程(实例)
- java读取oracle的存储过程
- [原创]用Oracle Java存储过程访问异构数据库
- asp.net 结合mysql存储过程进行分页代码
- oracle java外部存储过程
- java读取oracle的存储过程
- java调用存储过程代码
- java 调用oracle的存储过程返回记录集