首页 文章

Hibernate使用MySQL在SQL语法中生成错误

提问于
浏览
0

我尝试使用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 回答

  • 0

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

  • 0

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

    String query="from Userinfo u where u.loginId = :loginId"
    Query validateUserQuery= getsession().createQuery(query);
    validateUserQuery.setParameter("loginId",userinfo.getLoginId());
    

相关问题