hibernate+mysql查询条件有中文无法匹配的问题

 

 
 

用hibernate做mysql的数据库连接时,当查询条件中有中文的时候,查询结果没有记录,而数据库中是存在符合条件的记录的。

如下面的查询语句:

select t.id.student.sid from Studentcourse as t where t.fkTid='"+tid+"' and t.id.fkCid='"+cid+"' and t.fkClassId='"+classId+"' and t.fkSemester='"+semester+"' order by t.id.student.sid desc

其中where条件中的classId和semester是中文的。

用这条语句查询到的记录为空。

这一问题原来是没有的,重新部署后才出现,所以由于字符集的问题造成的,但我改了很多次字符集都搞不定,数据库、jsp、及数据库连接改成一致的时候也解决不了问题。

后来有一个比较麻烦的办法,但是可以解决问题,就是改写查询语句的书写方式:将变量值的指定写在语句外面

原来的方式:

   List sc=session.createQuery("select t.id.student.sid from Studentcourse as t where t.fkTid='"+tid+"' and t.id.fkCid='"+cid+"' and t.fkClassId='"+classId+"' and t.fkSemester='"+semester+"' order by t.id.student.sid desc").list();

现在的方式:
  String sqlString = "select t.id.student.sid from Studentcourse as t where t.fkTid=:tid and t.id.fkCid=:cidand t.fkClassId=:classId and t.fkSemester=:semester order by t.id.student.sid desc";
  Query query = session.createQuery(sqlString);
  query.setString("tid", tid);
  query.setString("cid", cid);
  query.setString("classId", classId);
  query.setString("semester", semester);
  
  List sc = query.list();

用这样的方式可以解决问题。

你可能感兴趣的:(mysql,Hibernate)