一个登录验证,可以输入数字的ID或字母和汉字的名字或EMAIL地址进行登录~
由于数据库中的字段不确定~(USER_ID USER_NICK_NAME USER_EMAIL)~所以想在判断以什么字段进行验证后在登录,但是以下写法好象不行,出现错误~
请问能不能类似这样? = ?写呢`?
或者有什么办法可以解决呢~?谢谢~ String HQL = null;
HQL = "from User user where user.USER_PASSWORD = ? and ? = ?";
Query query = HibernateUtil.getSession().createQuery(HQL);
query.setString(0, LOGIN_PASSWORD); if (LOGIN_USER.matches("^[1-9][0-9]{0,8}")) {
if (logger.isInfoEnabled()) {
logger.info("使用USER_ID验证!");
}
query.setString(1, "user.USER_ID");
query.setInteger(2, Integer.parseInt(LOGIN_USER));
} else if (LOGIN_USER
.matches("^[0-9a-zA-Z][_\\.0-9a-zA-Z]{0,19}@([0-9a-zA-Z][0-9a-zA-Z-]+\\.)+[a-zA-Z]{2,4}$")) {
if (logger.isInfoEnabled()) {
logger.info("使用USER_EMAIL验证!");
}
query.setString(1, "user.USER_EMAIL");
query.setString(2, LOGIN_USER);
} else if (LOGIN_USER
.matches("^[a-zA-Z\\u4e00-\\u9fa5][0-9a-zA-Z\\u4e00-\\u9fa5_]{3,15}")) {
if (logger.isInfoEnabled()) {
logger.info("使用USER_NICK_NAME验证!");
}
query.setString(1, "user.USER_NICK_NAME");
query.setString(2, LOGIN_USER);
} else {
if (logger.isInfoEnabled()) {
logger.info("工号/场名/EMAIL有误!");
}
errors.add("LOGIN_USER_ERROR", new ActionMessage(
"error.login.user.not.found"));
saveErrors(request, errors);
return (new ActionForward(mapping.getInput()));
}
User user = (User)query.iterate().next();

解决方案 »

  1.   

    这是HIBERNATE的语句
     Hibernate: select user0_.USER_ID as col_0_0_ from users user0_ where user0_.USER_PASSWORD=? and ?=?
    [hlgc] 16:21:06,375 [WARN] org.apache.struts.chain.commands.AbstractExceptionHandler - Unhandled exception
     java.util.NoSuchElementException: No more results
      

  2.   

    = 好前面的好像不行吧你用变量咯
    HQL = "*********************** " + sss +"=?";然后 再改变 sss 的值
      

  3.   

    对于这种任意字段验证登陆的方法你首先就要确保数据库里面的数据这几个字段不会出现重复
    这个是用户注册时需要作的验证
    然后么就多写几个HQL一个个判断咯,找到符合的就算登陆成功了。
      

  4.   

    最后我还是改成了这样~~多写几个HQL了~~~~~~ if (LOGIN_USER.matches("^[1-9][0-9]{0,8}")) {
    if (logger.isInfoEnabled()) {
    logger.info("使用USER_ID验证!");
    }
    HQL = "from User user where user.USER_PASSWORD = ? and user.USER_ID = ?";
    LOGIN_USER_ID = Integer.parseInt(LOGIN_USER);
    } else if (LOGIN_USER
    .matches("^[0-9a-zA-Z][_\\.0-9a-zA-Z]{0,19}@([0-9a-zA-Z][0-9a-zA-Z-]+\\.)+[a-zA-Z]{2,4}$")) {
    if (logger.isInfoEnabled()) {
    logger.info("使用USER_EMAIL验证!");
    }
    HQL = "from User user where user.USER_PASSWORD = ? and user.USER_EMAIL = ?";
    } else if (LOGIN_USER
    .matches("^[a-zA-Z\\u4e00-\\u9fa5][0-9a-zA-Z\\u4e00-\\u9fa5_]{3,15}")) {
    if (logger.isInfoEnabled()) {
    logger.info("使用USER_NICK_NAME验证!");
    }
    HQL = "from User user where user.USER_PASSWORD = ? and user.USER_NICK_NAME = ?";
    } else {
    if (logger.isInfoEnabled()) {
    logger.info("����Ĺ���工号/场名/EMAIL有误!");
    }
    errors.add("LOGIN_USER_ERROR", new ActionMessage(
    "error.login.user.not.found"));
    saveErrors(request, errors);
    return (new ActionForward(mapping.getInput()));
    }

    Query query = HibernateUtil.getSession().createQuery(HQL);
    query.setString(0, LOGIN_PASSWORD);
    if(LOGIN_USER_ID != 0){
    query.setInteger(1, LOGIN_USER_ID);
    }else{
    query.setString(1, LOGIN_USER);
    }