0

尝试使用 HQL 从表中获取记录时出现错误

引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你的SQL语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '.userinfo userinfo0_ where userinfo0_.login_id='muskan' 和 userinfo0_.pwd='musk' 附近使用正确的语法

完整的错误跟踪:

java:196) 在 org.hibernate.impl.SessionImpl.list(SessionImpl.java:1258) 在 org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) 在 com.ovs.domain.UserDAO.validateUser(UserDAO .java:16) at com.ovs.action.LoginTest.main(LoginTest.java:17) 原因:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native方法)在 sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 在 java.lang.reflect.Constructor。

表结构:

CREATE TABLE `userinfo` (
  `login_id` varchar(10) NOT NULL,
  `pwd` varchar(15) NOT NULL,
  `role` varchar(15) NOT NULL,
  `lastlogon` bigint(20) NOT NULL,
  PRIMARY KEY  (`login_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

休眠设置:

<name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>

Java代码:

String query="from Userinfo userinfo where userinfo.loginId='"+userinfo.getLoginId()+"' and userinfo.pwd='"+ userinfo.getPwd()+
                      "' and userinfo.role='"+userinfo.getRole()+"'";   
        Query validateUserQuery= getsession().createQuery(query);

        System.out.print(validateUserQuery.getQueryString());
        List<Userinfo> result = validateUserQuery.list();
4

2 回答 2

0

您应该尝试通过 userinfo.login_id 更改您的查询 userinfo.loginId

于 2013-08-12T17:48:55.800 回答
0

如果您可以显示“Userinfo”实体类或 XML,那就太好了。在查询中,您可以使用参数,以便您的字符串看起来更好,并保护自己免受 SQL 注入。

String query="from Userinfo u where u.loginId = :loginId"
Query validateUserQuery= getsession().createQuery(query);
validateUserQuery.setParameter("loginId",userinfo.getLoginId());
于 2016-08-05T09:11:13.020 回答