DAO文件中的方法
      public ArrayList<Scoredata> findScoredataBySubject(String subject){
ArrayList<Scoredata> scoredatas = new ArrayList<Scoredata>();
String sql = "select name,score from score where subject = "+ subject+"";
        Query queryObject = getSession().createSQLQuery(sql);
        List list = queryObject.list();
        for(Object o : list){
         Object[] map = (Object[]) o;
         String name = (String)map[0];
         String score = ((Integer)map[1]).toString();
         scoredatas.add(new Scoredata(name,score));
        }
        getSession().close();
        return scoredatas;
}
Action
public class dataAction extends Action{
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
dataForm dform = (dataForm)form;
UserDAO dao = new UserDAO();
String subject = dform.getSubject();
ArrayList<Scoredata> data = new ArrayList<Scoredata>();
if(subject!= null){
data= dao.findScoredataBySubject(subject);
}else{
subject="-1";
}
ArrayList<Subject> subjects = dao.findSubject();
request.setAttribute("datas", data);
request.setAttribute("subjects", subjects);
request.setAttribute("subject",subject);
return mapping.findForward("success");
}}
数据库中我有一张score表
name score subject
刘   98      maths
陈   56       english
.... .. ...    .....出现的错误message description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: org.hibernate.exception.SQLGrammarException: could not execute query
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause org.hibernate.exception.SQLGrammarException: could not execute query
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
org.hibernate.loader.Loader.doList(Loader.java:2235)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
org.hibernate.loader.Loader.list(Loader.java:2124)
org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:312)
org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1723)
org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175)
hibernate.UserDAO.findScoredataBySubject(UserDAO.java:175)
struts.action.dataAction.execute(dataAction.java:25)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause com.microsoft.sqlserver.jdbc.SQLServerException: 列名 'maths' 无效。
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(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.executeQuery(Unknown Source)
org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
org.hibernate.loader.Loader.getResultSet(Loader.java:1812)
org.hibernate.loader.Loader.doQuery(Loader.java:697)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
org.hibernate.loader.Loader.doList(Loader.java:2232)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
org.hibernate.loader.Loader.list(Loader.java:2124)
org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:312)
org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1723)
org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175)
hibernate.UserDAO.findScoredataBySubject(UserDAO.java:175)
struts.action.dataAction.execute(dataAction.java:25)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
求高手解释一下..

解决方案 »

  1.   

    hibernate.UserDAO.findScoredataBySubject(UserDAO.java:175)
    UserDAO第175行是什么,标出来!
      

  2.   


    sql文改成下面的方式:
    String sql = "select name,score from score where subject = '" + subject + "'";
      

  3.   

    这样相当于两个字符串拼接起来,前后两个字符串拼起来后,正好满足subject的两边加单引号。因为subject是String型
      

  4.   

    不加''表示 int类型 加了''表示字符串