public Long callProc(final String proc,final List<Object> paramList,final int outIndex, final int type) {
return (Long) getHibernateTemplate().execute(new HibernateCallback<Object>() {
public Object doInHibernate(org.hibernate.Session session) throws org.hibernate.HibernateException {
Long result = null;
Connection conn = null;
CallableStatement cstmt = null;
try {
conn = session.connection();
conn.setAutoCommit(false);
cstmt = conn.prepareCall(proc);
for (int i=0; paramList != null && i<paramList.size(); i++) {
if(i+1 == outIndex) {
cstmt.setInt(i+1,(Integer.parseInt(paramList.get(i).toString())));
} else {
cstmt.setString(i+1, paramList.get(i).toString());
}
}
cstmt.registerOutParameter(outIndex,type);
cstmt.execute();
result = new Long(cstmt.getInt(outIndex));
conn.commit();
} catch (Exception ex) {
try {
conn.rollback();
} catch (SQLException e1) {
logger.error(e1);
e1.printStackTrace();
}
ex.printStackTrace();
} finally {
if(cstmt != null) {
try {
cstmt.close();
}catch(Exception ex) {}
}
}
return result;
}
});
}
必须要用connection,当前代码还没有该用factory来获取connect,而使用已经过期的session.connect()方法。
看介绍在hibernate4.x之后该方法将会被去掉。
分享到:
相关推荐
在 Java 中,我们需要使用 `registerOutParameter()` 方法来注册输出参数,然后使用 `execute()` 方法来执行存储过程,并使用 `getString()` 方法来获取输出参数的值。 示例代码 下面是一个简单的示例代码,演示...
二、Hibernate3调用存储过程的原理 Hibernate3通过Query对象的createSQLQuery方法提供对存储过程的调用支持。它允许我们编写原生的SQL语句,包括调用存储过程,然后映射结果到Java对象。 三、具体步骤 1. **创建SQL...
#### 三、Hibernate调用存储过程的方法 在Hibernate中调用存储过程通常有两种方式:通过`Query`接口或使用`StoredProcedureQuery`。这里我们主要介绍使用`StoredProcedureQuery`的方式,因为这种方式更适合处理复杂...
以下是Java-Hibernate调用MySQL过程和函数的详细步骤: 1. **调用函数** - 函数调用通常涉及到返回值和可能的输入参数。例如,调用名为`get_pname`的函数,该函数可能接受三个参数。使用`CallableStatement`创建一...
下面将详细介绍如何在Java中利用Hibernate调用MySQL的存储过程和函数。 首先,我们需要理解CallableStatement接口,它是PreparedStatement的子接口,用于执行SQL存储过程。在Java中,我们通常使用CallableStatement...
本篇文章将详细讲解如何利用JDBC调用存储过程、函数以及处理游标。 首先,存储过程是数据库中预编译的一组SQL语句,它允许我们封装复杂的业务逻辑,提高执行效率,减少网络传输的数据量。在JDBC中调用存储过程通常...
- **OUT**:表示输出参数,存储过程执行完成后将值返回给调用者。 - **INOUT**:表示既可以作为输入也可以作为输出的参数。 ##### 2. 实例 考虑以下示例,用于更新账户余额: ```sql CREATE OR REPLACE PROCEDURE ...
综上所述,Java调用存储过程涉及到JDBC API的使用,包括建立连接、创建CallableStatement、设置和获取参数、执行存储过程以及关闭资源。熟练掌握这些步骤对于进行数据库交互的Java开发至关重要。
- **用Java调用Oracle存储过程**:使用`CallableStatement`接口来调用存储过程,设置输入参数,执行存储过程并获取输出结果。 #### 动态查询在存储过程中的应用 - **本地动态SQL**:在存储过程中构建动态SQL语句,...
总结,Struts2调用存储过程涉及数据库连接、DAO设计、Action控制和视图展示等多个环节。通过合理配置和编程,我们可以有效地利用存储过程提升应用的效率和灵活性。"Struts2_crud2.0_Procedure"示例提供了具体实现,...
- **调用示例**:调用存储过程可通过`EXECUTE MY_PROCEDURE('ONEPARAMETER');`实现。 - **存储过程与函数的区别**: - 函数通常有返回值,可以在SQL查询中直接调用; - 存储过程主要用于执行操作,没有返回值(但...
除了使用SQL查询,NHibernate还提供了HQL(Hibernate Query Language)和Criteria API来调用存储过程,但这通常需要自定义映射和实现一些额外的逻辑。这通常比直接使用SQL查询更复杂,但在某些情况下可能是更合适的...
- **使用Hibernate调用存储过程**: Hibernate提供了一种便捷的方式来调用存储过程,并处理结果集。 #### 九、在存储过程中做简单动态查询 - **本地动态SQL**: 直接在存储过程中构建动态SQL语句。 - **使用DBMS_SQL...
调用存储过程,可以使用EXECUTE命令,同时也可以通过Hibernate或Java等应用程序调用。存储过程可以无返回值,也可以有返回值,返回值可以是非列表类型,也可以是列表类型。动态查询在存储过程中也是常见需求,可以...
Oracle存储过程的参数可以是输入(IN)、输出(OUT)、或同时具有输入输出(INOUT)的能力,IN参数需要在调用时传入值,OUT参数则将存储过程的计算结果返回给调用者,而INOUT参数既可以在调用时传入值,也可以从存储...
### Hibernate调用存储过程详解 #### 一、概述 Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互过程。本文主要探讨如何在Hibernate中调用存储过程,并通过示例代码来具体分析...