浅谈Java存储过程调用

开发 后端
这里为大家谈谈Java存储过程调用,我们可以利用Java存储过程简化数据库操作, 利用Java存储过程沟通SQL、XML、Java、J2EE和Web服务。

创建需要的测试表:createtableTest(tidvarchar2(10),tnamevarchar2(10));

第一种情况:无返回值.

createorreplaceproceduretest_a(param1invarchar2,param2invarchar2)as  
begin  
insertintotestvalue(param1,param2);  
end; 
  • 1.
  • 2.
  • 3.
  • 4.

Java调用代码:

packagecom.test;  
importjava.sql.*;  
importjava.io.*;  
importjava.sql.*;  
publicclassTestProcA  
{  
publicTestProcA(){  
}  
publicstaticvoidmain(String[]args)  
{  
ResultSetrs=null;  
Connectionconn=null;  
CallableStatementproc=null;  
try{  
Class.forName("oracle.jdbc.driver.OracleDriver");  
conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test","test","test");  
proc=conn.prepareCall("{calltest_a(?,?)}");  
proc.setString(1,"1001");  
proc.setString(2,"TestA");  
proc.execute();  
}catch(Exceptione){  
e.printStackTrace();  
}finally{  
try{  
if(null!=rs){  
rs.close();  
 
if(null!=proc){  
proc.close();  
}  
if(null!=conn){  
conn.close();  
}  
}  
}catch(Exceptionex){  
}  
}  
}  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.

第二种情况:有返回值的存储过程(返回值非列表).

存储过程为:

createorreplaceproceduretest_b(param1invarchar2,param2outvarchar2)  
as  
begin  
selecttnameintoparam2fromtestwheretid=param1;  
end; 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

Java调用代码:

packagecom.test;  
importjava.sql.*;  
importjava.io.*;  
importjava.sql.*;  
publicclassTestProcB  
{  
publicTestProcB(){  
}  
publicstaticvoidmain(String[]args)  
{  
Connectionconn=null;  
CallableStatementproc=null;  
try{  
Class.forName("oracle.jdbc.driver.OracleDriver");  
conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test","test","test");  
proc=conn.prepareCall("{calltest_b(?,?)}");  
proc.setString(1,"1001");  
proc.registerOutParameter(2,Types.VARCHAR);  
proc.execute();  
System.out.println("Outputis:"+proc.getString(2));  
}catch(Exceptione){  
e.printStackTrace();  
}finally{  
try{  
 
if(null!=proc){  
proc.close();  
}  
 
if(null!=conn){  
conn.close();  
}  
 
}catch(Exceptionex){  
 
}  
}  
}  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.

第三种情况:返回列表.

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

createorreplacepackagetpackageas  
typet_cursorisrefcursor;  
proceduretest_c(c_refoutt_cursor);  
end;  
 
createorreplacepackagebodytpackageas  
proceduretest_c(c_refoutt_cursor)is  
begin  
openc_refforselect*fromtest;  
endtest_c;  
endtpackage; 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

Java调用代码:

packagecom.test;  
importjava.sql.*;  
importjava.io.*;  
importjava.sql.*;  
publicclassTestProcB  
{  
publicTestProcB(){  
}  
publicstaticvoidmain(String[]args)  
{  
Connectionconn=null;  
CallableStatementproc=null;  
ResultSetrs=null;  
try{  
Class.forName("oracle.jdbc.driver.OracleDriver");  
conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test","test","test");  
proc=conn.prepareCall("{?=calltpackage.test_b(?)}");  
 
proc.registerOutParameter(1,OracleTypes.CURSOR);  
proc.execute();  
while(rs.next()){  
System.out.println(rs.getObject(1)+"\t"+rs.getObject(2));  
}  
}catch(Exceptione){  
e.printStackTrace();  
}finally{  
try{  
if(null!=rs){  
rs.close();  
if(null!=proc){  
proc.close();  
}  
if(null!=conn){  
conn.close();  
}  
}  
}catch(Exceptionex){  
}  
}  
}  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.

Hibernate调用oracle存储过程

this.pnumberManager.getHibernateTemplate().execute(  
 newHibernateCallback()...{  
publicObjectdoInHibernate(Sessionsession)  
throwsHibernateException,SQLException...{  
CallableStatementcs=session.connection().prepareCall("{callmodifyapppnumber_remain(?)}");  
cs.setString(1,foundationid);  
cs.execute();  
returnnull;  
  }  
 }); 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

【编辑推荐】

  1. Java语言对properties资源文件的处理
  2. Java连接MySQL中文乱码处理
  3. 在Java应用程序中使用Jfreechart配置
  4. Java虚拟机内部构成浅析
  5. 浅谈Java线程的生命周期
责任编辑:彭凡 来源: CSDN
相关推荐

2009-09-15 11:08:01

LinQ调用存储过程

2010-11-12 09:46:55

Sql Server存

2011-07-22 13:47:23

存储过程

2009-07-22 15:58:34

JDBC调用Oracl

2012-03-01 13:34:02

Java

2009-06-17 10:33:17

Hibernate 存

2009-07-08 17:17:16

JDBC调用存储过程

2011-06-17 17:37:16

JavaSQL Server

2010-04-16 11:03:02

Oracle存储过程

2012-05-10 11:17:23

JavaSQL Server

2010-10-29 16:12:51

Oracle存储过程

2010-10-09 16:26:59

mysql存储过程

2010-11-10 15:16:14

Sql Server分

2011-08-16 16:59:58

PLSQL分页存储过程Java

2009-06-23 08:12:48

J2EE调用存储过程

2011-08-12 11:22:53

Oracle存储过程Java

2009-01-19 08:59:04

PHP调用MySQL存储过程MySQLi扩展

2009-09-17 11:32:52

LINQ调用存储过程

2010-03-30 13:30:49

Oracle存储

2009-08-06 18:02:22

存储过程
点赞
收藏

51CTO技术栈公众号