我尝试使用HQL从表中获取记录时收到错误
引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在'.userinfo userinfo0_附近使用正确的语法,其中userinfo0_.login_id ='muskan'和userinfo0_.pwd ='musk'在第1行完整错误跟踪:来自Userinfo userinfo其中userinfo . loginId ='muskan'和userinfo.pwd='muskan@admin'和userinfo.role ='Administrator'Exception在线程“main”org.hibernate.exception.SQLGrammarException:无法在org.hibernate.exception.SQLStateConverter上执行查询 . 在Org.hibernate.loader.loader.loader.Loader的org.hibernate.loader.Loader.doList(Loader.java:2452)的org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)中转换(SQLStateConverter.java:92) .listIgnoreQueryCache(Loader.java:2192)位于org.hibernate的org.hibernate.loader.Loader.list(Loader.java:2187)org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452) . 位于org.h的org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)的hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)位于com.ovs.domain.UserDAO.validateUser(UserDAO.java:16)的org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)的ibernate.impl.SessionImpl.list(SessionImpl.java:1258) .ovs.action.LoginTest.main(LoginTest.java:17)引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native)的第1行'.userinfo userinfo0_ where userinfo0_.login_id ='muskan'和userinfo0_.pwd ='musk'附近使用正确的语法 . 方法)at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)at java.lang.reflect.Constructor.newInstance(Unknown Source)at com.mysql.jdbc.Util.handleNewInstance (Util.java:406)com.mysql.jdbc.Util.getInstance(Util.java:381)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)com.mysql.jdbc.SQLError . com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558)中com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)的com.mysql.jdbc.MysqlIO中的createSQLException(SQLError.java:956) .comndCommand(MysqlIO.java:1959)com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109)at com.mysql.jdbc.ConnectionImpl.execSQL(Connecti) onImpl.java:2643)com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2077)at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2228)org.hibernate.jdbc.AbstractBatcher.getResultSet (AbstractBatcher.java:208)org.hibernate.loader.getResultSet(Loader.java:1869)org.hibernate.Loader.doQuery(Loader.java:718)org.hibernate.loader.Loader上的org.hibernate.loader.Loader.getResultSet(Loader.java:1869) . org.hibernate.loader.Loader.doList(Loader.java:2449)中的doQueryAndInitializeNonLazyCollections(Loader.java:270)... 9更多
Table structure:
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;
Hibernate Settings:
<name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
Java code:
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();
2 回答
您应该尝试通过userinfo.login_id更改查询userinfo.loginId
如果您可以显示“Userinfo”实体类或XML,那就太好了 . 在查询中,您可以使用参数,以便您的字符串看起来更好,并保护自己免受SQL注入 .