日期:2014-05-17  浏览次数:20643 次

为什么hql语句当查询条件为中文时查不出结果,英文就可以
hql语句当查询条件为中文时查不出结果,英文就可以。用setParameter()方法也没有解决,字符编码格式全都改为utf-8了,还是不行,求指导!
              String hql="from "+this.clazz.getName()+" where username=? and role=?";
Query query=this.sessionFactory.getCurrentSession().createQuery(hql);
query.setParameter(0, username);
query.setParameter(1, role);
User u=(User)query.uniqueResult();
System.out.println(u);
System.out.println(hql);
输出的hql语句在数据库里能够查询出结果
------解决方案--------------------
数据库是什么,反正mysql这个问题比较多
------解决方案--------------------
会不会是编码问题?
------解决方案--------------------
这个应该是乱码的问题。
------解决方案--------------------
估计是你的中文在传入数据库之前乱码了
------解决方案--------------------
jdbc:mysql://172.16.9.6:3306/school?useUnicode=true&characterEncoding=UTF-8
配置文件中的url加上编码,一般mysql这种问题很多!
------解决方案--------------------
引用:
jdbc:mysql://172.16.9.6:3306/school?useUnicode=true&characterEncoding=UTF-8
配置文件中的url加上编码,一般mysql这种问题很多!

这个正解,然后把tomcat安装目录下的conf文件夹下的server.xml文件中的    
<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443">加上URIEncoding='utf-8',试试看能不能解决
------解决方案--------------------
你的查询条件是从前台传过来的的吧  取值的时候就已经乱码了 ,看看jsp的编码和  tomcat的编码是否一致。
------解决方案--------------------
你把SQL语句输出来看一下,到底查的是什么
------解决方案--------------------
你的数据库表的编码是什么,赶紧查一下,必然是编码问题
------解决方案--------------------
把sql语句输出。自己到库里试试。