java存储过程

转载:http://developer.51cto.com/art/200906/130448.htm

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

第一种情况:无返回值.

  1. create or replace proceduretest_a(param1invarchar2,param2invarchar2)as  
  2. begin  
  3. insert into test value(param1,param2);  
  4. end; 

Java调用代码:

  1. package com.test;  
  2. import java.sql.*;  
  3. import java.io.*;  
  4. import java.sql.*;  
  5. public class TestProcA  
  6. {  
  7. public TestProcA(){  
  8. }  
  9. public static void main(String[]args)  
  10. {  
  11. ResultSet rs=null;  
  12. Connection conn=null;  
  13. CallableStatement proc=null;  
  14. try{  
  15. Class.forName("oracle.jdbc.driver.OracleDriver");  
  16. conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test","test","test");  
  17. proc=conn.prepareCall("{calltest_a(?,?)}");  
  18. proc.setString(1,"1001");  
  19. proc.setString(2,"TestA");  
  20. proc.execute();  
  21. }catch(Exceptione){  
  22. e.printStackTrace();  
  23. }finally{  
  24. try{  
  25. if(null!=rs){  
  26. rs.close();  
  27.  
  28. if(null!=proc){  
  29. proc.close();  
  30. }  
  31. if(null!=conn){  
  32. conn.close();  
  33. }  
  34. }  
  35. }catch(Exceptionex){  
  36. }  
  37. }  
  38. }  

 

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

存储过程为:

 
  1. create or replace procedur etest_b(param1invarchar2,param2outvarchar2)  
  2. as  
  3. begin  
  4. select tname into param2 from test where tid=param1;  
  5. end; 

Java调用代码:

 
  1. package com.test;  
  2. import java.sql.*;  
  3. import java.io.*;  
  4. import java.sql.*;  
  5. public class TestProcB  
  6. {  
  7. public TestProcB(){  
  8. }  
  9. public static void main(String[]args)  
  10. {  
  11. Connection conn=null;  
  12. CallableStatement proc=null;  
  13. try{  
  14. Class.forName("oracle.jdbc.driver.OracleDriver");  
  15. conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test","test","test");  
  16. proc=conn.prepareCall("{calltest_b(?,?)}");  
  17. proc.setString(1,"1001");  
  18. proc.registerOutParameter(2,Types.VARCHAR);  
  19. proc.execute();  
  20. System.out.println("Outputis:"+proc.getString(2));  
  21. }catch(Exceptione){  
  22. e.printStackTrace();  
  23. }finally{  
  24. try{  
  25.  
  26. if(null!=proc){  
  27. proc.close();  
  28. }  
  29.  
  30. if(null!=conn){  
  31. conn.close();  
  32. }  
  33.  
  34. }catch(Exceptionex){  
  35.  
  36. }  
  37. }  
  38. }  

第三种情况:返回列表.

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

 
  1. create or replace packaget package as  
  2. typet_cursorisrefcursor;  
  3. proceduretest_c(c_refoutt_cursor);  
  4. end;  
  5.  
  6. createorreplacepackagebodytpackageas  
  7. proceduretest_c(c_refoutt_cursor)is  
  8. begin  
  9. openc_refforselect*fromtest;  
  10. endtest_c;  
  11. endtpackage; 

Java调用代码:

 
  1. package com.test;  
  2. import java.sql.*;  
  3. import java.io.*;  
  4. import java.sql.*;  
  5. public class TestProcB  
  6. {  
  7. public TestProcB(){  
  8. }  
  9. publics tatic void main(String[]args)  
  10. {  
  11. Connection conn=null;  
  12. CallableStatement proc=null;  
  13. ResultSet rs=null;  
  14. try{  
  15. Class.forName("oracle.jdbc.driver.OracleDriver");  
  16. conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test","test","test");  
  17. proc=conn.prepareCall("{?=calltpackage.test_b(?)}");  
  18.  
  19. proc.registerOutParameter(1,OracleTypes.CURSOR);  
  20. proc.execute();  
  21. while(rs.next()){  
  22. System.out.println(rs.getObject(1)+"\t"+rs.getObject(2));  
  23. }  
  24. }catch(Exceptione){  
  25. e.printStackTrace();  
  26. }finally{  
  27. try{  
  28. if(null!=rs){  
  29. rs.close();  
  30. if(null!=proc){  
  31. proc.close();  
  32. }  
  33. if(null!=conn){  
  34. conn.close();  
  35. }  
  36. }  
  37. }catch(Exceptionex){  
  38. }  
  39. }  
  40. }  

Hibernate调用oracle存储过程

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

你可能感兴趣的:(java,oracle,sql,c,jdbc)