CREATE OR REPLACE PROCEDURE ZZJHQR (
RESULTSET OUT TEST_ZZJHQR.testresultset
)
AS
begin
open RESULTSET for
select * from rwfpb;
end;
这个是ORACLE存储过程CREATE OR REPLACE PACKAGE TEST_ZZJHQR is
type testresultset is ref cursor;
end TEST_ZZJHQR;
这个是返回数据集的程序包public List getList() {
Session session =getSessionFactory().openSession();
SQLQuery query = session.createSQLQuery("{Call LIMING_ZZJHQR()}");
return query.list();
}
这个是底层DAO调用存储过程的方法,返回一个LISTpublic ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); ApplicationContext context = getWebApplicationContext();
Irwglservice service = (Irwglservice)context.getBean("rwglservice");
zzjhqrForm zzForm = (zzjhqrForm) form;// TODO Auto-generated method stub
List resultList = null;
resultList = service.getList();
request.setAttribute("rwresultList", resultList);
ActionForward forward = mapping.getInputForward();
forward = mapping.findForward("success");
return forward;
}
这个是ACTION调用DAO层方法得到一个LIST
问题是执行完底层public List getList() {
Session session =getSessionFactory().openSession();
SQLQuery query = session.createSQLQuery("{Call LIMING_ZZJHQR()}");
return query.list();
}方法时,报错!
java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列:
PLS-00306: 调用 'LIMING_ZZJHQR' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
我感觉是我那个数据集参数没添加进去,问题是怎么添加啊,那算一个游标吧,游标参数怎么添加啊,用我的那种调用方式
RESULTSET OUT TEST_ZZJHQR.testresultset
)
AS
begin
open RESULTSET for
select * from rwfpb;
end;
这个是ORACLE存储过程CREATE OR REPLACE PACKAGE TEST_ZZJHQR is
type testresultset is ref cursor;
end TEST_ZZJHQR;
这个是返回数据集的程序包public List getList() {
Session session =getSessionFactory().openSession();
SQLQuery query = session.createSQLQuery("{Call LIMING_ZZJHQR()}");
return query.list();
}
这个是底层DAO调用存储过程的方法,返回一个LISTpublic ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); ApplicationContext context = getWebApplicationContext();
Irwglservice service = (Irwglservice)context.getBean("rwglservice");
zzjhqrForm zzForm = (zzjhqrForm) form;// TODO Auto-generated method stub
List resultList = null;
resultList = service.getList();
request.setAttribute("rwresultList", resultList);
ActionForward forward = mapping.getInputForward();
forward = mapping.findForward("success");
return forward;
}
这个是ACTION调用DAO层方法得到一个LIST
问题是执行完底层public List getList() {
Session session =getSessionFactory().openSession();
SQLQuery query = session.createSQLQuery("{Call LIMING_ZZJHQR()}");
return query.list();
}方法时,报错!
java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列:
PLS-00306: 调用 'LIMING_ZZJHQR' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
我感觉是我那个数据集参数没添加进去,问题是怎么添加啊,那算一个游标吧,游标参数怎么添加啊,用我的那种调用方式
解决方案 »
- 求助 java.lang.OutOfMemoryError: Java heap space 解决办法
- Java中如何实现XML, 应该用什么东西呢?
- 环比报表的显示
- 为什么我的javax下面没有servlet?????????`
- 我现在做了一个网站,在本地已经调试好了,请教如何发布
- 200分,请推荐相关书籍~十分感谢
- 框架窗口不显示水平滚动条,怎么办?。。。。。。。
- 请教关于使用struts2的问题
- Date类型字段,在actionForm里可以定义成java.util.Date类型吗?
- Java程序中读Oracle表数据是乱码 在线等!!!
- struts2中拦截器遇到action标签之后发生的问题
- java web中xml是什么东西
把这一句换成下面的试试:
Query query = session.getNamedQuery("Call LIMING_ZZJHQR");
<sql-query name = "getlist" callable="true">
{call LIMING_ZZJHQR(?)}</sql-query>然后引用通过名称吗
Query query = session.getNamedQuery("getlist");我那种方式为什么就不可以
严重: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: No getter method for property kind of bean list
getHibernateTemplate().execute(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException {
// TODO Auto-generated method stub
SQLQuery query = session.createSQLQuery("call 过程");
query.setParameter(0, "参数");
//..............多个略
return query.executeUpdate();
}});
query.xxxxx(1,Type.XXXX);//设置注册类型
result = query.getXXX(1);//获取结果集jdbc就是按上面那样来的, hibernate应该也一样,具体什么方法自己找下
ResultSet rs = null;
CallableStatement proc = null;
proc = (CallableStatement)conn
.prepareCall("{call 包名.存贮过程名(?)}");
proc.registerOutParameter(1, OracleTypes.CURSOR);
boolean result = proc.execute();
if (result) {
rs = (ResultSet)proc.getObject(1);
}
rs = (ResultSet)proc.getObject(1);这样试试
@SuppressWarnings("unchecked")
public List findCreateSqlMap(final String sql,final Map parameter) {
List<Map> list = getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
SQLQuery query = session.createSQLQuery(sql);
query.setProperties(parameter).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
return (List<Map>)query.list();
}});
return list;
} @SuppressWarnings("unchecked")
public List<Map> findCreateSqlMap(final String sql,final Object[] parameter) {
List<Map> list = getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
SQLQuery query = session.createSQLQuery(sql);
for(int i=0;i<parameter.length;i++){
query.setParameter(i, parameter[i]);
}
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
return (List<Map>)query.list();
}});
return list;
}这个是我们直接在dao层封装的,所有service层都调用这一个dao,这两个你都可以使用,第二个既可以调用过程也可以执行普通sql 我们一直这样用的!所以不存在运行不了的问题!
使用8楼的方法
有两年了还没搞过hibernate呢,悲哀呵
不知道你解决了没有parameter明显就是参数的意思啦,
select * from User u where u.name=?
Map的key就是查询字段,name
Map的value就是对应的值?占位符的值