浅谈Java存储过程调用

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

成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、成都做网站、崇州网络推广、微信平台小程序开发、崇州网络营销、崇州企业策划、崇州品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供崇州建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

第一种情况:无返回值.

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

Java调用代码:

 
 
 
  1. packagecom.test;
  2. importjava.sql.*;
  3. importjava.io.*;
  4. importjava.sql.*;
  5. publicclassTestProcA
  6. {
  7. publicTestProcA(){
  8. }
  9. publicstaticvoidmain(String[]args)
  10. {
  11. ResultSetrs=null;
  12. Connectionconn=null;
  13. CallableStatementproc=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. if(null!=proc){
  28. proc.close();
  29. }
  30. if(null!=conn){
  31. conn.close();
  32. }
  33. }
  34. }catch(Exceptionex){
  35. }
  36. }
  37. }
  38. }

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

存储过程为:

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

Java调用代码:

 
 
 
  1. packagecom.test;
  2. importjava.sql.*;
  3. importjava.io.*;
  4. importjava.sql.*;
  5. publicclassTestProcB
  6. {
  7. publicTestProcB(){
  8. }
  9. publicstaticvoidmain(String[]args)
  10. {
  11. Connectionconn=null;
  12. CallableStatementproc=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. if(null!=proc){
  26. proc.close();
  27. }
  28. if(null!=conn){
  29. conn.close();
  30. }
  31. }catch(Exceptionex){
  32. }
  33. }
  34. }
  35. }

第三种情况:返回列表.

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

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

Java调用代码:

 
 
 
  1. packagecom.test;
  2. importjava.sql.*;
  3. importjava.io.*;
  4. importjava.sql.*;
  5. publicclassTestProcB
  6. {
  7. publicTestProcB(){
  8. }
  9. publicstaticvoidmain(String[]args)
  10. {
  11. Connectionconn=null;
  12. CallableStatementproc=null;
  13. ResultSetrs=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. proc.registerOutParameter(1,OracleTypes.CURSOR);
  19. proc.execute();
  20. while(rs.next()){
  21. System.out.println(rs.getObject(1)+"\t"+rs.getObject(2));
  22. }
  23. }catch(Exceptione){
  24. e.printStackTrace();
  25. }finally{
  26. try{
  27. if(null!=rs){
  28. rs.close();
  29. if(null!=proc){
  30. proc.close();
  31. }
  32. if(null!=conn){
  33. conn.close();
  34. }
  35. }
  36. }catch(Exceptionex){
  37. }
  38. }
  39. }
  40. }

Hibernate调用oracle存储过程

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

本文标题:浅谈Java存储过程调用
文章分享:http://www.shufengxianlan.com/qtweb/news0/166450.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联