一个登录验证,可以输入数字的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();
由于数据库中的字段不确定~(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();
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
HQL = "*********************** " + sss +"=?";然后 再改变 sss 的值
这个是用户注册时需要作的验证
然后么就多写几个HQL一个个判断咯,找到符合的就算登陆成功了。
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);
}