学习笔记
出现这个问题的原因可能有很多,这里我就贴一下我出问题的原因
这是我的hql语句
# 使用占位符的形式传入参数
Query query = session.createQuery("from User u where u.name = ?1 and u.password = ?2");
query.setParameter(1,name);
query.setParameter(2,passwd);
查询的表正确,列名也正确,但就是查询不到数据,而当我直接在查询语句中写入固定的值时就能查询到相关数据:
Query query = session.createQuery("from User u where u.name = '张三' and u.password = '123'");
所以,问题应该就出在传入的参数上,参数是表单提交的数据,但是控制台输出传入的参数是没有问题的
我们还是打断点来看一下传入的参数:
可以看到,要传入的参数是乱码的,所以一直无法匹配数据库中的数据,也就导致我们一直获取不到数据
解决方法:
前段时间我因为控制台输出乱码所以在struts配置文件中添加了一条配置:
<constant name="struts.i18n.encoding" value="gbk" />
确实能解决控制台输出乱码的问题,但也导致了获取到的表单数据是乱码,真正的解决方法应该是:可以参考这篇文章:JavaWeb项目获取到的表单数据在控制台显示乱码
所以,在struts配置文件中将这条配置删掉,只要能保证传入到hql语句中的参数的编码格式是正确的就可以
因为在控制台显示信息时,也会有一个单独编码的过程,tomcat会将显示的信息编码后再进行输出,所以控制台显示的信息并不代表和我们获取到的数据的编码格式相同,所以控制台显示数据没有问题并不代表数据真的没有问题,所以还是尽量做到获取数据和控制台显示数据的编码格式一致,最好还是打断点看一下!!!