public List<Map<String, Object>> executeProc(final String pkgName, final String procName, final List paraList)
throws Exception {
if (pkgName == null || procName == null || paraList == null)
throw new IllegalArgumentException("有空参数,无法执行!");
final StringBuilder query = new StringBuilder();
Object queryResult;
// 拼装存储过程
query.append("{call ");
query.append(pkgName);
query.append(".");
query.append(procName);
query.append("(?,?,?");
for (int i = 0; i < paraList.size(); i++) {
query.append(",?");
}
query.append(")}");
queryResult = (Object) HibernateUtil.getJdbcTemplate().execute(query.toString(), new CallableStatementCallback() {
public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
cs.registerOutParameter(1, Types.INTEGER);
cs.registerOutParameter(2, Types.VARCHAR);
cs.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);
for (int i = 0; i < paraList.size(); i++) {
Object object = paraList.get(i);
if (object == null)
cs.setObject(3 + i + 1, null);
else if (object instanceof Integer)
cs.setInt(3 + i + 1, ((Integer) object).intValue());
else if (object instanceof String)
cs.setString(3 + i + 1, object.toString());
else if (object instanceof Date)
cs.setDate(3 + i + 1, new java.sql.Date(((Date) object).getTime()));
else
cs.setObject(3 + i + 1, object);
}
cs.execute();
int retcode = cs.getInt(1);
if (retcode != 0) {
return cs.getString(2);
}
ResultSet rs = (ResultSet) cs.getObject(3);
ResultSetMetaData metaHeader = rs.getMetaData();
int columnCount = metaHeader.getColumnCount();
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
while (rs.next()) {
HashMap<String, Object> entry = new HashMap<String, Object>();
for (int i = 1; i <= columnCount; i++) {
Object rsc = rs.getObject(i);
if (rsc instanceof TIMESTAMP) {
entry.put(metaHeader.getColumnName(i), new Date(rs.getTimestamp(i).getTime()));
} else {
entry.put(metaHeader.getColumnName(i), rsc);
}
}
list.add(entry);
}
return list;
}
});
if (queryResult instanceof String) {
// 抛出异常信息
throw BankServiceExceptionConverter.convert("存储过程" + query.toString() + "执行发生错误,原因:" + (String) queryResult);
} else if (queryResult instanceof List) {
return (List<Map<String, Object>>) queryResult;
} else {
throw BankServiceExceptionConverter.convert("存储过程" + query.toString() + "执行发生异常,结果集无法获取");
}
}
详细;存储过程中包含3个参数,包名,存储过程名,参数集合。默认返回3个参数,一个number; 一个varchar,一个cursor.
在第三个参数中,可以自定义需要输入的参数个数,存储过程会自动添加输入参数:
create or replace package body XXX is
procedure GET_XXXX_QUERY(RETCODE OUT NUMBER,
RETSTR OUT NVARCHAR2,
P_CUR OUT REF_CURSOR,
P_Par in varchar2) as
begin
RETCODE := 0;
RETSTR := '';
open p_cur for
select b.字段 as aa from table b where b.字段2=P_Par ;
end;
end XXX;
调用例子:
List<String> paraList = new ArrayList<String>();
paraList.add(1);
paraList.add(2);
List<Map<String, Object>> results = null;
results = commonDao.executeProc("XXX", "GET_XXXX_QUERY", paraList);
if (results != null && results.size() > 0) {
Map<String, Object> result = results.get(0);
aa= Integer.parseInt(result.get("aa") + "");
}
可以根据实际情况自行调整存储过程
相关推荐
hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程
使用hibernate的query调用oracle的存储过程/function,包含例子,源码以及数据库文件
在hibernate中使用存储过程,调用存储过程
hibernate调用存储过程的方法,里面有典型的例题,欢迎大家下载
java调用hibernate存储过程详细介绍,各种配置方法,还有与jdbc调用存储过程二者之间的对比。
hibernate基本配置及使用方法,高手免看.
hibernate本对数据库的操作有些不完美,有必要的时候可以调用存储过程来补足。
在myeclipse中配置hibernate 自动生成配置文件在myeclipse中配置hibernate 自动生成配置文件
在Hibernate中配置Proxool连接池
hibernate配置,详细的讲了hibernate用的配置文件和方法,可以哦
Hibernate配置详解,详细描述了Hibernate的配置文件,一对一 一对多,多对多的单双向配置详解。
在hibernate中调用oracle中的存储过程的详细代码。可以借鉴使用,帮助学习。
好了,下面列出在MyEclipse8.5中配置最基本的Hibernate的过程: 1,工具栏File->new->Java Project->工程命名,我这里是HibernateTest,其他都默认就好了->Finish 2,紧接着把数据库驱动加入classpath,方法前面...
配置了tomcat之后发现jndi好简单啊,可是碰到了hibernate该怎么做呢,本例详细解析
这个文档适用初学者,详细解释了Hibernate的配置环境和方法。
Hibernate 配置详解,参数说得很详细,相信对大家有所提高
Hibernate XML配置表映射实例
最基本的Hibernate的配置。亲测可以运行。 包含各种jar包,有配置说明。简单好用,你值得拥有