这问题困扰了我两天了,但始终找不到错在那?不知道其所以然,刚才忽然间听人提起url连接时要注意中文问题时,才开始怀疑,是不是因为中文问题?好废话补多少直入主题;
原因很简单,问题在于我连接mysql用的url时,没有指定字符集,导致下面源码查询不到任何数据(前提是数据库存在符合该条件的数据sql语句执行是可以的):
Session session=null;
Transaction transaction=null;
try{
session= HibernateSessionUtil.openSession();//session确保了能拿到
transaction=session.beginTransaction();
//查询计算机系和外语系的学生
String hql="From Student where sdept in ('计算机系','外语系')";
Query query=session.createQuery(hql);
List list=query.list();
for(Student stu :list){
System.out.println(stu.getSname()+"\t"+stu.getSdept()+"\t");
}
transaction.commit();
}catch(Exception e){
if(transaction!=null)transaction.rollback();
e.printStackTrace();
}finally{
if(session!=null&&session.isOpen()){
session.close();
}
}
代码本身没有问题,问题出在 hibernate.xml配置文件中:
原来写法:
jdbc:mysql://localhost:3306/hql_test
修改后:
jdbc:mysql://localhost:3306/hql_test?useunicode=true&characterEncoding=utf8
好了,重新执行;
结果出来了:
Hibernate: select student0_.id as id0_, student0_.snum as snum0_, student0_.sname as sname0_, student0_.ssex as ssex0_, student0_.sdept as sdept0_, student0_.sage as sage0_, student0_.saddress as saddress0_ from hql_test.student student0_ where student0_.sdept in ('计算机系' , '外语系')
林青霞
计算机系
刘德华
外语系
林可欣
计算机系
oracle好像没有这个问题,此次主要是针对mysql而言的,其他数据库有没有遇到这问题,本人没有亲身测试,如果有这问题,我个人认为,在保证程序与hql语句正确的情况下,首先Hibernate出错的原因较少,因为Hibernate没有那么垃圾,那么只能怀疑是否是中文问题了。
说的有什么不对和不足望大家多多指出和指教谢谢。
2013-4-25 16:56
+3
乐于分享
2013-4-25 18:10
分享至: