发新话题
移动帖子 加入精华 加入置顶 加入收藏 关注此帖

hibernate3.1调用存储过程有问题。



hibernate3.1调用存储过程有问题。

这个问题已经困扰我很久了,到现在还没有的到好的解决方案,麻烦您帮我解决下。谢谢!

经过这几天我在网络上找的解决方案,目前是报这样的错误。错误信息如下:
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: could not execute query
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

org.hibernate.exception.GenericJDBCException: could not execute query
org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:82)
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:70)
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
org.hibernate.loader.Loader.doList(Loader.java:1596)
org.hibernate.loader.Loader.list(Loader.java:1577)
org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:112)
org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1414)
org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:153)
com.ssh.hbm.UserInfoDAO.select_User(UserInfoDAO.java:43)
com.ssh.struts.action.UserInfoAction.execute(UserInfoAction.java:42)
org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

com.microsoft.sqlserver.jdbc.SQLServerException: 没有为参数号 2 设置值。
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildParamTypeDefinitions(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildPreparedStrings(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doPrepExec(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.execute(Unknown Source)
org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:168)
org.hibernate.dialect.SybaseDialect.getResultSet(SybaseDialect.java:142)
org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:127)
org.hibernate.loader.Loader.getResultSet(Loader.java:1269)
org.hibernate.loader.Loader.doQuery(Loader.java:391)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
org.hibernate.loader.Loader.doList(Loader.java:1593)
org.hibernate.loader.Loader.list(Loader.java:1577)
org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:112)
org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1414)
org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:153)
com.ssh.hbm.UserInfoDAO.select_User(UserInfoDAO.java:43)
com.ssh.struts.action.UserInfoAction.execute(UserInfoAction.java:42)
org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.26 logs.

说下我的项目,ajax+struts1.2+spring1.2+hibernate3.1,数据库是sql server2000,容器tomcat5.5、jdk1.5

因为这是做测试存储的过程,有些地方方法我就没有写太完整,关于调用存储的代码我都贴出来。

这是我UserInfoAction.java中调用的其中一个方法,
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        // TODO Auto-generated method stub
        System.out.println("userInfoAction ");
        userinfodao.select();//这方法是没有问题,是做一般的查询的,代码会在下面贴出来
        System.out.println("----------------");
                //这里就是UserInfoAction.java中的42行,是掉用存储的相关方法。这里出错。
        userinfodao.select_User();         
                return null;
    }
这是我这是我UserInfoDAO.java中调用的其中一些方法,
 
//这个方法是做一般查询的方法,用做测试这个项目架构的,这个方法调用没有,说明正框架结合也是没有问题的。
    public Collection select(){
        Collection c=null;
        c=this.getSession().createQuery("From UserInfo").list();
        Iterator i=c.iterator();
        while(i.hasNext()){
            UserInfo user=(UserInfo)i.next();
            System.out.println(user.getUserName());
        }
        return c;
    }
    //这个是掉用存储过程的的方法。
    public void select_User(){
        List list=null;
                //在这个地方出错。也就UserInfoDAO.java类中的43行
        list=this.getSession().getNamedQuery("getUserInfo").setString(0, "a").list();
        Iterator i=list.iterator();
        while(i.hasNext()){
            UserInfo user=(UserInfo)i.next();
            System.out.println(user.getUserName());
        }
    }
相关hibernate配置问题

UserInfo.hbm.xml:如下
 
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
    <class name="com.ssh.hbm.UserInfo" table="userInfo" schema="dbo" catalog="Mydata">
        <id name="userId" type="java.lang.Integer">
            <column name="userId" />
            <generator class="identity" />
        </id>
        <property name="userName" type="java.lang.String">
            <column name="userName" length="30" />
        </property>
        <property name="address" type="java.lang.String">
            <column name="address" length="100" />
        </property>
    </class>
<!-- 下面是存储的相关配置-->
    <sql-query name="getUserInfo" callable="true">
    <return alias="UserInfo" class="com.ssh.hbm.UserInfo">
        <return-property name="userId" column="userId"/>
           <return-property name="userName" column="userName"/>
           <return-property name="address" column="address"/>
    </return>
    {?=call getUserInfo(?)}
    </sql-query>
</hibernate-mapping>
这是创建表和储存过程的sql语句
 
--创建表和插入数据,也是没有问题的
create table userInfo
(
userId int primary key identity(1,1),
userName varchar(30) ,
address varchar(100),
)

insert into userInfo values('admin','北京')
insert into userInfo values('guoqiang','武汉')
insert into userInfo values('jarbo','福州')
go
--创建存储过程
create proc getUserInfo
@userName varchar(20)
as
(
select * from userinfo where userName like '%'+@userName+'%'
)
exec getUserInfo 'a'
编辑 回复 快速回复 TOP

Re:hibernate3.1调用存储过程有问题。

那个CSDN的帖子是你发的?
快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP

Re:hibernate3.1调用存储过程有问题。

是我发的,老紫竹你要帮帮忙啊
编辑 回复 快速回复 TOP

Re:hibernate3.1调用存储过程有问题。

QQ联系我!
快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP
发新话题