大家好,我在做SSH过种中,碰到一个问题,找了很久都没有答案:
在Struts中用Hibernate根据用户名和密码查询用户中:
如果用户名为中文字符,比如(张三,123456),刚语句
from UserAccount where name=? and passwd=?
返回的列表为空,但是在SQL*Plus中执行语句
select count(*) from user_account where name='张三' and passwd='123456';
则返回1;
但是如果用户名为半角字符,比如(zhangsan,123456),则Hibernate可以正确返回!!说明下:
我的程序字符集是UTF-8;
如果查询全部from UserAccount可以全部查出,并且名字都能显示正确;
目前也许就只是参数不能为中文.不知是该如何解决,请各位高手多多指教?多谢了.
在Struts中用Hibernate根据用户名和密码查询用户中:
如果用户名为中文字符,比如(张三,123456),刚语句
from UserAccount where name=? and passwd=?
返回的列表为空,但是在SQL*Plus中执行语句
select count(*) from user_account where name='张三' and passwd='123456';
则返回1;
但是如果用户名为半角字符,比如(zhangsan,123456),则Hibernate可以正确返回!!说明下:
我的程序字符集是UTF-8;
如果查询全部from UserAccount可以全部查出,并且名字都能显示正确;
目前也许就只是参数不能为中文.不知是该如何解决,请各位高手多多指教?多谢了.
解决方案 »
- Oracle多线程查询记录锁死问题
- oracle存储过程的问题
- oracle把一个gb2312编码的数据库倒入到utf-8的数据库怎么做
- oracle 存储过程编译成功,但执行错误,求教原因。
- NET MANAGER的问题
- 中秋快樂,散分呀!
- 在jbuider 的编辑过程中经常选择某个变量,在VC中 用ctr + 双击就行,在jbuidler 中有没有
- 那位高手,知道如何设置,可以正确显示中文内容
- 如何创建一个工作时间外禁止insert,update,delete,select所有表的trigger
- 第一次用oracle:为什么我无法登陆到Enterprise Manager?
- 帮忙优化(重构)下sql
- 存储过程逐条更新记录
hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>Struts2字符集?
struts.properties
struts.i18n.encoding=UTF-8Struts1字符集?
web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>..SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>还有服务器字符集,如tomcat
C:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\server.xml
<Connector
port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>慢慢查吧,麻烦
我发现一个问题:
如果HQL不用占位符,而是直接拼接成SQL语句,查询正确.List<UserAccount> users = this.hibernateTemplate.find("from UserAccount where name=? and passwd=?", new String[]{name, passwd});当参数中有中文时,查询返回为空;但是:
StringBuilder sql = new StringBuilder();
.........(把参数拼接成一条SQL语句)
List<UserAccount> users = this.hibernateTemplate.find(sql.toString());却可以正确返回.
String str = new String("张三".getBytes("iso-8859-1"),"utf-8");
1. 在调用hsql之前,把name打印出来看看,
2. 配置log或者配置p6spy作为jdbc driver,把参数和sql打出来看看。