Java 调用Oracle 存储过程的方法

Java 可以通过 JDBC API 调用 Oracle 数据库的存储过程。以下是一个简单的示例,演示如何调用一个没有输入参数和输出参数的存储过程:

import java.sql.*;  
  
public class OracleStoredProcedureExample {  
   public static void main(String[] args) {  
      Connection conn = null;  
      CallableStatement cs = null;  
      ResultSet rs = null;  
  
      try {  
         // 1. 建立数据库连接  
         conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "username", "password");  
  
         // 2. 准备调用存储过程的语句  
         String sql = "{call my_stored_procedure()}";  
         cs = conn.prepareCall(sql);  
  
         // 3. 执行存储过程  
         cs.execute();  
  
         // 4. 处理结果(如果有的话)  
         rs = cs.getResultSet();  
         while (rs.next()) {  
            // 处理结果集中的数据  
         }  
      } catch (SQLException e) {  
         e.printStackTrace();  
      } finally {  
         // 5. 关闭资源  
         try {  
            if (rs != null) rs.close();  
            if (cs != null) cs.close();  
            if (conn != null) conn.close();  
         } catch (SQLException e) {  
            e.printStackTrace();  
         }  
      }  
   }  
}

如果存储过程有输入参数和输出参数,可以在调用语句中使用占位符(?)来代替参数,并在执行语句之前设置参数的值。例如:

String sql = "{call my_stored_procedure(?, ?)}";  
cs = conn.prepareCall(sql);  
cs.setInt(1, 123); // 设置第一个参数的值  
cs.registerOutParameter(2, Types.VARCHAR); // 注册第二个参数为输出参数  
cs.execute();  
String result = cs.getString(2); // 获取第二个参数的值

目前大多数JAVA项目都使用Mybatis

Mybatis调⽤存储过程返回多个结果集

配置⽂件
<resultMap type="Integer" id="test1">
<result column="test1"   jdbcType="INTEGER" javaType="Integer" />
</resultMap>
<resultMap type="test.Test2" id="test2">
<result column="Id" property="id" jdbcType="VARCHAR" javaType="String"/>
</resultMap>
<select id="getTests" statementType="CALLABLE" parameterType="Map"
resultMap="test1,test2" >
{call P_GetTest(#{id,mode=IN,jdbcType=VARCHAR})}
</select>
resultMap="test1,test2" 这⾥返回多个结果集
接⼝
public List<List<?>>  getTests
(Map<String, Object> map);
Service调⽤
Map<String,Object> map=new HashMap<String, Object>();
map.put("id", "22333");
//取得返回的结果集
List<List<?>> results = testDao.getTests(map);
//结果集1
System.out.println(((List<Integer>)results.get(0)).get(0));
//结果集2
System.out.println((List<Test2>)results.get(1));
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zz_ll9023one

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值