尝试使用HQL从表中获取记录时出现错误
引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你有一个 SQL语法错误;查看与您的手册相对应的手册 MySQL服务器版本,用于在'.userinfo附近使用正确的语法 userinfo0_其中userinfo0_.login_id ='muskan'和 userinfo0_.pwd ='麝香'在第1行
完整错误跟踪:
来自Userinfo userinfo,其中userinfo.loginId ='muskan'和 userinfo.pwd='muskan@admin'和userinfo.role ='Administrator'Exception 在线程“main”org.hibernate.exception.SQLGrammarException:可以 不执行查询 org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92) 在 org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 在org.hibernate.loader.Loader.doList(Loader.java:2452)处 org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2192)at at org.hibernate.loader.Loader.list(Loader.java:2187)at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)at at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363) 在 org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) 在org.hibernate.impl.SessionImpl.list(SessionImpl.java:1258)at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)at 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服务器版本,用于在'.userinfo附近使用正确的语法 userinfo0_其中userinfo0_.login_id ='muskan'和 userinfo0_.pwd ='麝香'在第1行 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) at sun.reflect.NativeConstructorAccessorImpl.newInstance(未知 来源)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 来自java.lang.reflect.Constructor.newInstance(未知来源) 在com.mysql.jdbc.Util.handleNewInstance(Util.java:406)at com.mysql.jdbc.Util.getInstance(Util.java:381)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1030)at at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)at at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558)at at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)at at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)at at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109)at at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2643)at at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2077) 在 com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2228) 在 org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) 在org.hibernate.loader.Loader.getResultSet(Loader.java:1869)at org.hibernate.loader.Loader.doQuery(Loader.java:718)at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270) 在org.hibernate.loader.Loader.doList(Loader.java:2449)... 9更多
表格结构:
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();
答案 0 :(得分:0)
您应该尝试通过userinfo.login_id更改查询userinfo.loginId
答案 1 :(得分:0)
如果您可以显示“Userinfo”实体类或XML,那就太棒了。 在查询中,您可以使用参数,以便您的字符串看起来更好,并保护自己免受SQL注入。
String query="from Userinfo u where u.loginId = :loginId"
Query validateUserQuery= getsession().createQuery(query);
validateUserQuery.setParameter("loginId",userinfo.getLoginId());