我的项目是用SSH + MYSQL 做的,在查询数据的时候,出现了很奇怪的现象,英文可以查到数据,中文就不匹配了,弄了很久,还是不行,过滤器加了、编码统一用UTF-8(数据库和页面编码都设了),网上能试的基本都试了,会不会是数据库的问题呢?在控制台输出是乱码,但是页面读出又是中文哦,哪位达人知道的,帮帮忙,急,先谢了。执行查询的代码: 
  public List findAllOwner() { 
log.debug("finding all CarInfo carInfo"); 
List list = null; 
try { 
String queryString = "from CarInfo ci where ci.role='车主'"; 
list = getHibernateTemplate().find(queryString); 
} catch (RuntimeException re) { 
log.error("find all failed", re); 
throw re; 

return list; 

这个就不能查到数据。但是换成  
public List findAllOwner() { 
log.debug("finding all CarInfo carInfo"); 
List list = null; 
try { 
String queryString = "from CarInfo"; 
list = getHibernateTemplate().find(queryString); 
} catch (RuntimeException re) { 
log.error("find all failed", re); 
throw re; 

return list; 
}又可以读出全部数据,而且打印到页面上能正常显示中文,或者改用 
  public List findAllOwner() { 
log.debug("finding all CarInfo carInfo"); 
List list = null; 
try { 
String queryString = "from CarInfo ci where ci.role='aa'"; 
list = getHibernateTemplate().find(queryString); 
} catch (RuntimeException re) { 
log.error("find all failed", re); 
throw re; 

return list; 
}也可以查询到role=aa的数据 

解决方案 »

  1.   

    终于搞定了,可能是find()方法不能带参数吧,用了另外一个方法getHibernateTemplate().findByNamedParam(queryString, params, args)就行了,呵呵。
      

  2.   

    可以用DetachedCriteria来试试。中文没有问题DetachedCriteria dc = DetachedCriteria
    .forClass(Entity.class);
    Criterion c = Restrictions.like("name", "%" + name
    + "%");