这个问题已经困扰我很久了,到现在还没有的到好的解决方案,麻烦您帮我解决下。谢谢!
经过这几天我在网络上找的解决方案,目前是报这样的错误。错误信息如下:
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'