jdbc调用存储过程,输入参数设置比较简单,暂略。存储过程定义如下:
CREATE OR REPLACE PROCEDURE java_proc_test(data_curor out sys_refcursor)
as
BEGIN
open data_curor for select * from corp_basic_info;
END java_proc_test;
这是个返回结果集的存储过程。
java代码如下:
Connection conn = null;
ResultSet rs = null;
CallableStatement cstmt = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection ("jdbc:oracle:thin:@<ip>:1521:db", "user", "password");
cstmt = conn.prepareCall("{call java_proc_test(?)}");
//如果有输入参数,用cstmt 的set...方法设置即可,sql中的索引是以1开始
cstmt.registerOutParameter(1, OracleTypes.CURSOR);
//注册返回类型,如果是简单类型也有相关的值
cstmt.execute();
rs = (ResultSet) cstmt.getObject(1);
while (rs.next()) {
System.out.println(rs.getString("corp_id") + " -- " + rs.getString("corp_name"));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(rs);
DBUtil.close(cstmt);
DBUtil.close(conn);
}
Spring 使用 JdbcTemplate 调用存储过程需要自定义两个类,配置输入参数和取得查询结果。调用的代码如下:
JList<Map> results = (List<Map>) jdbcTemplate.execute(new ProcCallableStatementCreator(zone_id, corp_id, target_id), new ProcCallableStatementCallBack());
一个类实现org.springframework.jdbc.core.CallableStatementCreator接口,作为CallableStatement的创建者:
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import oracle.jdbc.driver.OracleTypes;
import org.springframework.jdbc.core.CallableStatementCreator;
public class ProcCallableStatementCreator implements CallableStatementCreator {
private int zoneId;
private int corpId;
private int targetId;
public ProcCallableStatementCreator(int zoneId, int corpId, int targetId){
this.zoneId = zoneId;
this.corpId = corpId;
this.targetId = targetId;
}
public CallableStatement createCallableStatement(Connection conn) throws SQLException {
CallableStatement cstmt = null;
cstmt = conn.prepareCall("{call select_warn_date(?,?,?,?)}");
cstmt.setInt(1, zoneId);
cstmt.setInt(2, corpId);
cstmt.setInt(3, targetId);
cstmt.registerOutParameter(4, OracleTypes.CURSOR);
return cstmt;
}
}
另一个类根据创建的CallableStatement获取查询结果:
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.CallableStatementCallback;
public class ProcCallableStatementCallBack implements CallableStatementCallback {
public Object doInCallableStatement(CallableStatement cstmt) throws DataAccessException, SQLException {
List<Map> results = new ArrayList<Map>();
cstmt.execute();
ResultSet rs = null;
rs = (ResultSet) cstmt.getObject(4);//根据存储过程输出参数的顺序获得值,从1开始,存储过程返回的结果集可以是多个
Map eachRow = null;
if (rsCod != null){
while (rsCod.next()) {
eachRow = new HashMap();
eachRow.put("corpId", rsCod.getInt("corp_id"));
eachRow.put("corpName", rsCod.getString("corp_name"));
...
results.add(eachRow);
}
}
return results;
}
}
分享到:
相关推荐
本篇文章将深入探讨如何使用JDBC调用存储过程。 首先,存储过程是预编译的SQL代码集合,它们封装在数据库中,可以接收输入参数,处理数据,然后返回结果或输出参数。存储过程在提高性能、增强安全性和简化复杂操作...
本文将详细讲解如何使用JDBC来调用存储过程,以实现数据的增删改查操作。 首先,理解存储过程是数据库中的一个重要概念。存储过程是一组预先编译好的SQL语句集合,它可以包含控制流语句、输入/输出参数,甚至可以有...
### JDBC调用存储过程 1. **加载驱动**:使用`Class.forName()`方法加载Oracle的JDBC驱动,例如`oracle.jdbc.driver.OracleDriver`。 2. **建立连接**:通过`DriverManager.getConnection()`方法获取数据库连接。 3....
本篇文章将详细讲解如何利用JDBC调用存储过程、函数以及处理游标。 首先,存储过程是数据库中预编译的一组SQL语句,它允许我们封装复杂的业务逻辑,提高执行效率,减少网络传输的数据量。在JDBC中调用存储过程通常...
在这个“JDBC调用存储过程的小例子”中,我们将探讨如何使用JDBC来执行数据库中的存储过程,这是一个非常实用的功能,特别是在处理复杂的业务逻辑或批量数据操作时。 首先,我们需要了解什么是存储过程。存储过程是...
jdbc调用存储过程?.avi
### JDBC调用存储过程知识点详解 #### 一、引言 在Java开发中,通过Java Database Connectivity (JDBC) 来访问数据库是非常常见的操作。其中,调用存储过程是实现复杂业务逻辑的一种重要方式。存储过程是预编译好...
在给定的代码片段中,我们可以看到一个典型的使用JDBC调用存储过程的例子。下面,我们将分步骤解析这段代码: 1. **加载JDBC驱动**: ```java try{ Class.forName(...
PLSQL jdbc调用存储过程(入门)
本文将详细阐述如何通过JDBC在Java程序中调用存储过程和函数,并提供一个实际的例子。 ### 1. JDBC概述 JDBC是Java API,它提供了统一的接口来访问不同类型的数据库。通过JDBC,开发者可以进行数据库连接、执行SQL...
Java面试题31.jdbc调用存储过程.mp4
在软件开发中,JDBC...尽管JDBC调用存储过程相对简单,但设计和开发存储过程本身可能需要更深入的数据库知识和SQL编程技巧。在实际应用中,存储过程可以提高性能,封装复杂的业务逻辑,并提供数据库层面的安全性。
android通过jdbc方式连接mysql,并执行存储过程。连接数据库部分最好新建一个线程来实现和主线程分开。编译之前确定添加了mysql-connector-java-5.0.8-bin库否则会出错
JDBC调用存储过程的基本步骤如下: 1. 加载数据库驱动并建立连接:使用`Class.forName()`加载驱动,然后通过`DriverManager.getConnection()`建立与数据库的连接。 2. 创建CallableStatement对象:与...
本篇文章将深入探讨如何在Hibernate框架中调用存储过程,并与JDBC调用存储过程的方式进行比较。 首先,我们要了解存储过程是什么。存储过程是预编译的SQL语句集合,存储在数据库服务器中,可被多次调用,减少了网络...
JDBC存储过程的调用
对于 `P_EMP_SELECT` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程,并将结果集处理到 `List` 集合中。 对于 `P_EMP_ADD` 存储过程,我们使用 `CallableStatementCallback` 对象调用存储过程...