新手提问,一个SQL相关的小问题,困扰了一下午了...

sinval 2011-03-27 02:35:19
出错代码锁定在
List list = dao.QueryObject("from Login l where l.username='" + user+ "' and l.password='" + pass + "'");
是一个hibernate下的用户登录模块,得到用户输入的user password,对比数据库,有的话就存入list
报错是
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.login login0_ where login0_.username='' and login0_.password=''' at line 1

SQL语法错误,HQL和SQL这里有什么不同么
...全文
129 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
empty1021 2011-03-28
  • 打赏
  • 举报
回复
你把 user和password的字段顺序换过看看!
海里的顽石 2011-03-27
  • 打赏
  • 举报
回复
我是这样写的参考下吧。用的SSH框架
package bit.jeffy.dao;

import java.util.Iterator;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import bit.jeffy.orm.User;

public class LogUserDao extends HibernateDaoSupport {

private String hql="from User u where u.account_no=? and u.password=?";
//log对象是log4j提供的日志对象,如果在进行数据库操作的过程中出现任何问题,都会通过Log对象记录下来
private static final Log log=LogFactory.getLog(LogUserDao.class);
protected void initDao(){

}
public boolean IsUserValid(String userid,String password)
{
String[] userlist=new String[2];
userlist[0]=userid;
userlist[1]=password;

List ret=null;

try{
//调用getHibernateTemplate函数获取HibernateTemplate对象,然后该对象的find方法到持久化层查找指定的
//用户名和密码
ret=this.getHibernateTemplate().find(hql,userlist);
}catch(Exception e){
log.error(e.getMessage());//如果有异常,则把异常消息记录保存到日志中
return false;
}
if(ret.size()>0)//如果返回的记录大于0,说明找到了
return true;
else //小于0则没找到
return false;
}
public User getUser(String userid, String password){

String[] userlist=new String[2];
userlist[0]=userid;
userlist[1]=password;
Iterator it=null;
List ret=null;

try{
//调用getHibernateTemplate函数获取HibernateTemplate对象,然后该对象的find方法到持久化层查找指定的
//用户名和密码
ret=this.getHibernateTemplate().find(hql,userlist);
it=ret.iterator();
return (User)it.next();
}catch(Exception e){
log.error(e.getMessage());//如果有异常,则把异常消息记录保存到日志中
return null;
}
}
}
chmicrosoft 2011-03-27
  • 打赏
  • 举报
回复
hibernate 中一直是这样写的,
Query query=session.createQuery("from Login l where l.username=:username and l.password=:password");
query.setString("username",user);
query.setString("password",pass);
List result = query.list();

这样设置参数就不要担心标点符号的问题了。
希望对楼主有所帮助,谢谢!
chmicrosoft 2011-03-27
  • 打赏
  • 举报
回复
List list = dao.QueryObject("from Login l where l.username='" + user+ "' and l.password='" + pass + "'");中username 和password应该是Login类实例的属性名,并且要有对应的set方法,一定不是表的列名。

看到楼主的这种写法,就一直有个疑问,想请教一下QueryObject到底是方法还是类?
LoongMint 2011-03-27
  • 打赏
  • 举报
回复
.login login0_ where login0_.username='' and login0_.password=''' at line 1 楼主你的这个是不是username 和 password没有传递过来值,因为这里显示的是 username = '' and password = ''。
redlotus_lyn 2011-03-27
  • 打赏
  • 举报
回复
得看Login表中的定义个格式
jeky_zhang2013 2011-03-27
  • 打赏
  • 举报
回复
你看下hibernate中的语法
xsqure 2011-03-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 sinval 的回复:]
出错代码锁定在
List list = dao.QueryObject("from Login l where l.username='" + user+ "' and l.password='" + pass + "'");
是一个hibernate下的用户登录模块,得到用户输入的user password,对比数据库,有的话就存入list
报错是
com.mysql.jdbc.exce……
[/Quote]
确认下username,password是类的属性名还是表的列名
aitong8985 2011-03-27
  • 打赏
  • 举报
回复
select * from 表名 where username='"+user+"'and password='"+pwd+"'"

暂时没有发现错误在哪里。

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧