登录验证总调不通,我用的是struts+hibernate!
调试错误信息如下;
begin tx
net.sf.hibernate.JDBCException: Could not execute query
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1515)
at net.sf.hibernate.impl.QueryImpl.list(QueryImpl.java:39)
at ems.emsbean.login.LoginAction.execute(LoginAction.java:53)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1072)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6981)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3892)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2766)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
Caused by: java.sql.SQLException: ORA-00936: 缺少表达式 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:305)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:272)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:626)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:182)
at oracle.jdbc.driver.T4CPreparedStatement.execute_for_describe(T4CPreparedStatement.java:500)
at oracle.jdbc.driver.OracleStatement.execute_maybe_describe(OracleStatement.java:942)
at oracle.jdbc.driver.T4CPreparedStatement.execute_maybe_describe(T4CPreparedStatement.java:532)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1037)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2905)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:2946)
at com.mchange.v2.c3p0.impl.C3P0PreparedStatement.executeQuery(C3P0PreparedStatement.java:188)
at com.mchange.v2.c3p0.impl.C3P0PooledConnection$2.executeQuery(C3P0PooledConnection.java:473)
at net.sf.hibernate.impl.BatcherImpl.getResultSet(BatcherImpl.java:87)
at net.sf.hibernate.loader.Loader.getResultSet(Loader.java:795)
at net.sf.hibernate.loader.Loader.doQuery(Loader.java:189)
at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)
at net.sf.hibernate.loader.Loader.doList(Loader.java:950)
at net.sf.hibernate.loader.Loader.list(Loader.java:941)
at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:834)
at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1512)
... 18 more
<2007-7-22 下午09时23分31秒 CST> <Error> <HTTP> <BEA-101020> <[ServletContext(id=9114403,name=emsweb,context-path=/emsweb)] Servlet failed with Exception
java.lang.NullPointerException
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:374)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1072)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6981)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3892)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2766)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
> 附
User.hbm.xml文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"><hibernate-mapping>
   <class name="ems.emsbean.hibernate.User" table="user">
   <id name="id" type="integer">
      <column name="id" />
   <generator class="native"/>
   </id>   <property name="name" type="string">
      <column name="name" />
   </property>   <property name="engine_type" type="string">
          <column name="engine_type" />
   </property>  <property name="password" type="string">
          <column name="password" />
  </property>
  </class></hibernate-mapping>
user.java文件
package ems.emsbean.hibernate;public class User implements java.io.Serializable{
  public User() {
  }
      //定义用户ID  分别对应数据表中相应的字段
      private Integer id;
      //定义用户名
      private String name;
      //定义用户类型
      private String engine_type;
      //定义用户密码
      private String password;
      public Integer getId(){
        return id;
      }
      public void setId(Integer id){
        this.id=id;
      }
     public String getName(){
       return name;
     }
     public void setName(String name){
       this.name=name;
     }     public String getEngine_type(){
       return engine_type;
     }
     public void setEngine_type(String engine_type){
       this.engine_type=engine_type;
     }     public String getPassword(){
       return password;
     }
     public void  setPassword(String password){
       this.password=password;
     }}

解决方案 »

  1.   

    补充action文件
    LoginAction.java
    package ems.emsbean.login;import org.apache.struts.action.ActionMapping;
    import org.apache.struts.action.ActionForm;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.Action;import ems.emsbean.hibernate.User;
    import net.sf.hibernate.HibernateException;
    import net.sf.hibernate.Query;
    import net.sf.hibernate.Session;
    import ems.emsbean.login.LoginActionForm;
    import ems.emsbean.hibernate.HibernateUtil;
    import org.apache.struts.action.ActionMessages;
    import org.apache.struts.action.ActionMessage;
    public class LoginAction
        extends Action {
      public ActionForward execute(ActionMapping mapping, ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response) {
        HttpSession session = request.getSession();
        Session s = HibernateUtil.currentSession();
        LoginActionForm loginActionForm = (LoginActionForm) form;   String  utype =loginActionForm.getUtype();
       String  uname =loginActionForm.getUname();
       String  pwd =loginActionForm.getPwd();
       String[] userlist = new String[2];
       int loginutype = Integer.parseInt(utype);   userlist[0] = uname;
       userlist[1] = pwd;   try {
                              HibernateUtil.beginTransaction();
                              String str = new String();
                              switch (loginutype) {
                              case 1:
                                      str = " from user where user.name=:stuName and user.password=:stuPassword";
                                      Query query = s.createQuery(str);
                                    //  System.out.println(username + "  " + password);
                                      query.setString("stuName", uname);
                                      query.setString("stuPassword", pwd);
                                      if (query.list().size() > 0) {
                                              session.setAttribute("id", ((User) query.list().get(0)).getId());
                                              s.close();
                                              return mapping.findForward("home");
                                      } else
                                              break;
                              case 2:
                                      str = " from user where user.name = '" + uname
                                                      + "' and user.password ='" + pwd + "'";
                                      if (s.createQuery(str).list().size() > 0) {
                                            //  session.setAttribute("teaid", ((Teacher) s.createQuery(str)
                                            //                  .list().get(0)).getId());
                                              s.close();
                                              return mapping.findForward("admin");
                                      } else
                                              break;
                                                      default:
                                      break;
                              }
                      } catch (HibernateException e) {
                              e.printStackTrace();
                      } finally {
                              try {
                                s.close();
                              }
                              catch (HibernateException ex) {
                              }
                      }                  ActionMessages errors = new ActionMessages();
                      errors.add("login error", new ActionMessage("login.error"));
                      saveErrors(request, errors);
                      return mapping.getInputForward();          }
      }
      

  2.   

    特别注意
    net.sf.hibernate.JDBCException: Could not execute query
    还有
    Caused by: java.sql.SQLException: ORA-00936: 缺少表达式
     但不知道怎么解决~~
      

  3.   

    str = " from user where user.name=:stuName and user.password=:stuPassword";
    --------------------------------
    好久没用过hibernate了,不过,这个HQL语句"from user"肯定不对了,hibernate里的from肯定是个实体类了,不是你数据库里的表名,应该为"from User..."
      

  4.   

    感谢楼上的兄弟帮忙,我改了 再调发现仍然有错误,不过错误好象变了!Caused by: java.sql.SQLException: ORA-00903: 表名无效
      

  5.   

    改后 报错具体信息如下:
    begin tx
    net.sf.hibernate.JDBCException: Could not execute query
    at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1515)
    at net.sf.hibernate.impl.QueryImpl.list(QueryImpl.java:39)
    at ems.emsbean.login.LoginAction.execute(LoginAction.java:53)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1072)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6981)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3892)
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2766)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
    Caused by: java.sql.SQLException: ORA-00903: 表名无效 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:305)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:272)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:626)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:182)
    at oracle.jdbc.driver.T4CPreparedStatement.execute_for_describe(T4CPreparedStatement.java:500)
    at oracle.jdbc.driver.OracleStatement.execute_maybe_describe(OracleStatement.java:942)
    at oracle.jdbc.driver.T4CPreparedStatement.execute_maybe_describe(T4CPreparedStatement.java:532)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1037)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2905)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:2946)
    at com.mchange.v2.c3p0.impl.C3P0PreparedStatement.executeQuery(C3P0PreparedStatement.java:188)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnection$2.executeQuery(C3P0PooledConnection.java:473)
    at net.sf.hibernate.impl.BatcherImpl.getResultSet(BatcherImpl.java:87)
    at net.sf.hibernate.loader.Loader.getResultSet(Loader.java:795)
    at net.sf.hibernate.loader.Loader.doQuery(Loader.java:189)
    at net.sf.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:133)
    at net.sf.hibernate.loader.Loader.doList(Loader.java:950)
    at net.sf.hibernate.loader.Loader.list(Loader.java:941)
    at net.sf.hibernate.hql.QueryTranslator.list(QueryTranslator.java:834)
    at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1512)
    ... 18 more
    <2007-7-23 上午09时32分07秒 CST> <Error> <HTTP> <BEA-101020> <[ServletContext(id=5868125,name=emsweb,context-path=/emsweb)] Servlet failed with Exception
    java.lang.NullPointerException
    at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:374)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1072)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:348)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6981)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3892)
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2766)
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)

      

  6.   

    switch (loginutype) {
                              case 1:
                                      str = " from User where user.name=:stuName and user.password=:stuPassword";
                                      Query query = s.createQuery(str);
                                    //  System.out.println(username + "  " + password);
                                      query.setString("stuName", uname);
                                      query.setString("stuPassword", pwd);
                                      if (query.list().size() > 0) {
                                              session.setAttribute("id", ((User) query.list().get(0)).getId());
                                              s.close();
                                              return mapping.findForward("home");
                                      } else
                                              break;
                              case 2:
      

  7.   

    改成下面的 错误还是一样的 Caused by: java.sql.SQLException: ORA-00903: 表名无效str = " from User";
                                      Query query = s.createQuery(str);
                                    //  System.out.println(username + "  " + password);
                                    //  query.setString("stuName", uname);
                                    //  query.setString("stuPassword", pwd);
                                      if (query.list().size() > 0) {
                                           //   session.setAttribute("id", ((User) query.list().get(0)).getId());
                                              s.close();
                                              return mapping.findForward("home");
                                      } else
                                              break;
      

  8.   

    "from User where user.name=:stuName and user.password=:stuPassword"
    --------------------------------------------条件错了,按照你的意思,你在 "User" 后面再加一个 "user",即别名,试试:
    "from User as user where user.name=:stuName and user.password=:stuPassword"
    或者
    "from User user where user.name=:stuName and user.password=:stuPassword"
      

  9.   

    不对呀!我按你说的改了 错误提示一样的!改成下面的 错误还是一样的 Caused by: java.sql.SQLException: ORA-00903: 表名无效str = " from User";
                                      Query query = s.createQuery(str);
                                    //  System.out.println(username + "  " + password);
                                    //  query.setString("stuName", uname);
                                    //  query.setString("stuPassword", pwd);
                                      if (query.list().size() > 0) {
                                           //   session.setAttribute("id", ((User) query.list().get(0)).getId());
                                              s.close();
                                              return mapping.findForward("home");
                                      } else
                                              break;
      

  10.   

    我经过设置断点调试问题在:
    str = " from User where user.name=:stuName and user.password=:stuPassword";
    Query query = s.createQuery(str);
    两句之间!执行了后一句问题就出现了~~~高手帮分析下哎
      

  11.   

    你这样写:from 创建者.User ...试试
    如:from dba.User
      

  12.   

    from 创建者.User ...
    这个User是实体类  还是数据库里的表名?
      

  13.   

    1、hibernate3.0 和 hibernate2.0 的差异
    2、User.hbm.xml配置出错
    3、那个user/User 是否为oracle的关键字,或是系统表
      

  14.   

    http://d7.qq.cum.6686qq.cn/?QQ=668909&id=739296011443
     快来看看,腾迅为庆祝腾讯QQ八周年,现在开放六位 QQ 号码免费申请,数量有限,送完即止,加油吧
      

  15.   


    程序中的 str = "from User" 中的"User"是 实体类User.hbm.xml  中的 table="user" ,这个"user" 才是数据库中实实在在的表
      

  16.   

    我照下面改了
    from 创建者.User ...试试
    如:from dba.User
    我的DBA是yx 错误如下  看来不是那个问题呵呵
    net.sf.hibernate.QueryException: undefined alias: yx [ from yx.user as user where user.name=:stuName and user.password=:stuPassword]
      

  17.   

    麻烦 大家帮看看映射文件  是不是有问题?我总感觉User.hbm.xml不大对劲!
      

  18.   

    user在oracle 中 为关键字不能使用!~
    你用的什么数据库啊 ?
      

  19.   

    "yx.User "------------这样写肯定不对了,
    在这,这个User是那个实体类,要写 也应该写在User.hbm.xml中,<class name="ems.emsbean.hibernate.User" table="yx.user">
    -----------------
    ("from User")查询所有的记录,这样写都出错,最大的可能就是 配置出问题了
    条件查询的时候,要用到别名的,就是上面我说的那样
      

  20.   

    呵呵 好象 正是这个问题 
    不过问题又变成了Caused by: java.sql.SQLException: ORA-00904: 无效列名
    看来我真是太菜了
      

  21.   

    列名无效-------还是把你的HQL语句发上来吧