java调用oracle的存储过程

本文介绍如何在Java中调用Oracle数据库中的存储过程。包括创建存储过程(如添加、删除和查询操作),并展示了具体的Java代码实现。通过示例演示了如何执行带有输入参数及输出参数的存储过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


java调用oracle的存储过程

实现存储过程必须先在oracle建立相应的Procedures,如下所示:

Sql代码  收藏代码
  1. --添加信息--  
  2. create or replace procedure insert_t_test(  
  3. p_id in number,  
  4. p_name in varchar2,  
  5. p_password in varchar2  
  6. is  
  7. begin  
  8. insert into t_test(id,name,passwordvalues(p_id,p_name,p_password);  
  9. end;  
  10. -------------------------  
  11. --删除信息--  
  12. create or replace procedure del_t_test(  
  13. p_id                 in number,  
  14. x_out_record out number) is  
  15. begin  
  16.   
  17.     delete t_test where id = p_id;  
  18.     x_out_record := 0;  
  19. exception  
  20.     when others then  
  21.         x_out_record := -1;  
  22. end;  
  23. -----------------------------  
  24. --查询所有信息--  
  25. create or replace procedure all_t_test(  
  26. x_out_record out number,  
  27. x_out_cursor out sys_refcursor) is  
  28. begin  
  29.     open x_out_cursor for  
  30.         select * from t_test;  
  31.     x_out_record := 0;  
  32. exception  
  33.     when others then  
  34.         x_out_record := -1;  
  35. end;  
--添加信息--
create or replace procedure insert_t_test(
p_id in number,
p_name in varchar2,
p_password in varchar2
) is
begin
insert into t_test(id,name,password) values(p_id,p_name,p_password);
end;
-------------------------
--删除信息--
create or replace procedure del_t_test(
p_id                 in number,
x_out_record out number) is
begin

    delete t_test where id = p_id;
    x_out_record := 0;
exception
    when others then
        x_out_record := -1;
end;
-----------------------------
--查询所有信息--
create or replace procedure all_t_test(
x_out_record out number,
x_out_cursor out sys_refcursor) is
begin
    open x_out_cursor for
        select * from t_test;
    x_out_record := 0;
exception
    when others then
        x_out_record := -1;
end;

 

其中的存储过程名字(就是加粗部分)必须要和java代码中的相对应
Java代码如下:
Java代码  收藏代码
  1. package com.procedure.db;  
  2.   
  3. import java.sql.CallableStatement;  
  4. import java.sql.Connection;  
  5. import java.sql.DriverManager;  
  6. import java.sql.ResultSet;  
  7. import java.sql.SQLException;  
  8. import java.sql.Types;  
  9.   
  10. import oracle.jdbc.OracleTypes;  
  11.   
  12.   
  13. public class ConnDB {  
  14.   
  15.   private String url="jdbc:oracle:thin:@localhost:1521:orcl";  
  16.     
  17.   private String driverClass="oracle.jdbc.driver.OracleDriver";  
  18.     
  19.   private String username="scott";  
  20.     
  21.   private String password="hello";  
  22.     
  23.     
  24.   public    Connection getConn(){  
  25.     Connection conn=null;  
  26.     try {  
  27.       Class.forName(driverClass);  
  28.       conn=DriverManager.getConnection(url,username,password);  
  29.     } catch (ClassNotFoundException e) {  
  30.       e.printStackTrace();  
  31.     } catch (SQLException e) {  
  32.       e.printStackTrace();  
  33.     }  
  34.     return conn;  
  35.   }  
  36.     
  37.   public static void main(String args[]){  
  38.     ConnDB cd=new ConnDB();  
  39.     Connection conn=cd.getConn();  
  40.     /** 
  41.      * 添加 有输入参数    无输出参数 
  42.      */  
  43.     /*try { 
  44.       CallableStatement call=conn.prepareCall("{call insert_t_test(?,?,?)}"); 
  45.       call.setInt(1, 66); 
  46.       call.setString(2, "小猫"); 
  47.       call.setString(3, "8989"); 
  48.       Boolean b=call.execute(); 
  49.       System.out.println("b="+b); 
  50.     } catch (SQLException e) { 
  51.       e.printStackTrace(); 
  52.     }*/  
  53.       
  54.     /** 
  55.      * 删除 有输入参数    得到输出参数 
  56.      */  
  57.     /*try { 
  58.       CallableStatement    call=conn.prepareCall("{call del_t_test(?,?)}"); 
  59.       call.setInt(1, 66); 
  60.       call.registerOutParameter(2, Types.INTEGER); 
  61.       call.execute(); 
  62.       Integer result=call.getInt(2); 
  63.       System.out.println("执行结果为0正常,执行结果为-1不正常"+result); 
  64.     } catch (SQLException e) { 
  65.       e.printStackTrace(); 
  66.     }*/  
  67.       
  68.     /**  
  69.      * 使用游标查询所有信息 无输入参数 有输出参数  
  70.      */  
  71.     try {  
  72.       CallableStatement call=conn.prepareCall("{call all_t_test(?,?)}");  
  73.       call.registerOutParameter(1, Types.INTEGER);  
  74.       call.registerOutParameter(2, OracleTypes.CURSOR);  
  75.       call.execute();  
  76.       Integer result=call.getInt(1);  
  77.       ResultSet rs=(ResultSet) call.getObject(2);  
  78.       while(rs.next()){  
  79.         System.out.println(rs.getInt(1));  
  80.         System.out.println(rs.getString(2));  
  81.         System.out.println(rs.getString(3));  
  82.       }  
  83.     } catch (SQLException e) {  
  84.       e.printStackTrace();  
  85.     }  
  86.   }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值