//例子一:只有输出参数
<!-- DB2 dataSource-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
@Test
public void testRegisterCustomer() {
List<Map<String, Object>> locationInfo = (List<Map<String, Object>>) jdbcTemplate.execute(
"{call sp_rpt_satisfybyskill_new(?)}", new CallableStatementCallback() {
@Override
public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
// 设置第一个输出参数的参数类型为游标类型
cs.registerOutParameter(1, OracleTypes.CURSOR);
// 执行存储过程
cs.execute();
// 获取第一个输出参数,从1开始
ResultSet rs = (ResultSet) cs.getObject(1);
List<Map<String, Object>> csList = new ArrayList<Map<String, Object>>();
// 转换每行的返回值到Map中
while (rs.next()) {
Map<String, Object> rowMap = new HashMap<String, Object>();
rowMap.put("zsnattachmentid", rs.getString("zsnattachmentid"));
rowMap.put("attachmentname", rs.getString("attachmentname"));
csList.add(rowMap);
}
rs.close();
return csList;
}
});
System.out.println(locationInfo);
}
--下面是REF游标和存储过程
CREATE OR REPLACE PACKAGE Pack_Service AS
TYPE t_RetDataSet IS REF CURSOR;
END Pack_Service;
CREATE OR REPLACE PROCEDURE Sp_Rpt_SatisfyBySkill_new
(
rCursor OUT Pack_Service.t_Retdataset -- 返回结果集
)
AS
exc_Param EXCEPTION;
BEGIN
OPEN rCurSor FOR
select t.zsnattachmentid as "zsnattachmentid",t.attachmentname "attachmentname" from zsnattachment t where t.zsnattachmentid in(2000000236,2000000239);
RETURN;
END;
//例子二:输入输出参数都有
@Test
public void testRegisterCustomer() {
List<Map<String, Object>> locationInfo = (List<Map<String, Object>>) jdbcTemplate.execute(
"{call sp_rpt_satisfybyskill_new(?,?,?)}", new CallableStatementCallback() {
@Override
public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
//设置第一个输入参数的值
cs.setLong(1, 2000000236);
//设置第二个输入参数的值
cs.setLong(2, 2000000256);
// 设置第三个参数的参数类型为游标类型(registerOutParameter用来注册输出参数)
cs.registerOutParameter(3, OracleTypes.CURSOR);
// 执行存储过程
cs.execute();
// 获取第一个输出参数,3代表的是输出参数所在的位置
ResultSet rs = (ResultSet) cs.getObject(3);
List<Map<String, Object>> csList = new ArrayList<Map<String, Object>>();
// 转换每行的返回值到Map中
while (rs.next()) {
Map<String, Object> rowMap = new HashMap<String, Object>();
rowMap.put("zsnattachmentid", rs.getString("zsnattachmentid"));
rowMap.put("attachmentname", rs.getString("attachmentname"));
csList.add(rowMap);
}
rs.close();
return csList;
}
});
System.out.println(locationInfo);
}
CREATE OR REPLACE PROCEDURE Sp_Rpt_SatisfyBySkill_new(id_start number,
id_end number,
rCursor OUT Pack_Service.t_Retdataset -- 返回结果集
) AS
exc_Param EXCEPTION;
BEGIN
OPEN rCurSor FOR
select t.zsnattachmentid as "zsnattachmentid",
t.attachmentname "attachmentname"
from zsnattachment t
where t.zsnattachmentid between id_start and id_end;
RETURN;
END;
分享到:
相关推荐
3. **调用`JdbcTemplate`**:使用`JdbcTemplate`的`callProcedure()`或`execute()`方法执行存储过程,传入`SplitPageResultSetExtractor`实例作为参数。 4. **处理结果**:`ResultSetExtractor`会在内部维护当前页...
使用Spring的JdbcTemplate调用Oracle的存储过程
存储过程使用 `SYS_REFCURSOR` 输出参数将结果集返回给调用方。 `P_EMP_ADD` 存储过程用于添加新员工信息,并返回添加结果。该过程接收两个输入参数:`V_ID` 和 `V_NAME`,分别用于添加员工 ID 和姓名。存储过程...
超出打开游标的最大数的原因和解决方案 在 Oracle 数据库中,游标(cursor)是一种临时工作区,用于存储查询结果。...通过调整 OPEN_CURSORS 参数值和优化应用程序的游标使用,可以避免超出打开游标的最大数问题。
例如,我们可以使用`SimpleJdbcCall`来执行存储过程,并提供一个`SqlParameterSource`来传递参数,再通过`ResultSetExtractor`或`RowCallbackHandler`来处理结果集: ```java SimpleJdbcCall storedProc = new ...
首先,我们可以使用JdbcTemplate的queryForList()方法来查询数据库,并将查询结果转换为自定义对象集合。下面是一个示例代码: ```java public List<UserInfo> findAll() { String sql = "SELECT * FROM user_info...
JdbcTemplate 调用存储过程
在Spring框架中,jdbcTemplate提供了简便的方法来执行存储过程,如`callProcedure()`,它可以处理输入和输出参数,以及处理游标结果集。在实际应用中,需要配置数据源、事务管理器和jdbcTemplate bean,然后在业务...
使用Spring的JdbcTemplate实现分页功能
在Java应用中,特别是在基于Spring的系统中,`JdbcTemplate`是一个非常常用的数据访问工具,它提供了事务管理、参数绑定、异常翻译等功能,使得数据库操作更加简单、安全。 首先,要使用`JdbcTemplate`,我们需要...
在`main`方法中,通过`jdbcTemplate`执行SQL查询,获取`SqlRowSet`对象,然后遍历结果集打印用户真实姓名(`USER_REAL_NAME`)。这展示了JdbcTemplate的基本用法,即通过调用其提供的方法执行SQL并处理结果。 ...
在使用 JdbcTemplate 时,需要将 SQL 语句和参数传递给相应的方法,然后 JdbcTemplate 会将参数绑定到 SQL 语句中,并执行查询或更新操作。 在查询结果为空或查询结果大于 1 行时,JdbcTemplate 会抛出异常。这些...
2. **JdbcTemplate的使用**:在使用`JdbcTemplate`执行SQL时,其内部会自动创建SQL执行的Logger对象,如果日志级别设置为`DEBUG`,则会打印出SQL语句及其参数。例如,对于一个简单的查询操作: ```java ...
5. **结果集处理**:对于查询操作,JdbcTemplate支持多种方式将结果集转换为Java对象,如RowMapper、ResultSetExtractor、List等,方便数据的处理和映射。 6. **异常处理**:JdbcTemplate对JDBC的异常进行了封装,...
在本文中,我们将深入探讨如何使用Spring Boot集成JdbcTemplate与MySQL数据库进行数据操作。Spring Boot以其简化配置和快速启动的特点,已经成为Java开发者的首选框架。而JdbcTemplate是Spring框架的一部分,它提供...
5. **处理结果**:对于查询操作,`JdbcTemplate`会返回一个结果集,你可以通过`RowMapper`或`ResultSetExtractor`将结果转换为Java对象。 6. **事务管理**:如果需要,可以通过`PlatformTransactionManager`和`@...
3. 执行分页查询:通过分页信息调用JdbcTemplate方法来返回结果集合。 JdbcTemplate的使用涉及到许多细节,如事务管理、异常处理和SQL注入防护等。在具体应用时,开发者需要结合实际业务需求和Spring框架的其他特性...