应该在以下几个地方检查:
1:检查mysql安装目录下的配置文件my.ini,
[mysql]
默认的default-character-set=latin1
改为default-character-set=utf8(不是utf-8)
(注意,如果需要导数据,请先修改完编码,再进行数据导入,同时,注意你的源数据的格式,需要是utf8的编码)
2:检查你的连接:
jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding
=utf8(不是utf-8)
连接数据库的编码也要设置为utf8
3: 检查你的页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
设置文件的编码
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
设置内容编码
如果这几个地方都统一了,应该就没有什么问题了。
中文检索的实现:
在保证上面编码问题正确的情况下进行。
首先,如果jsp页面到action,需要进行编码的转换
因为,jsp的页面form提交到action时,默认的是iso-8859-1的编码,需要转换成utf-8编码
代码如下:
String keyStr = request.getParameter("key");
String pageStr = request.getParameter("page");
String pageSizeStr = request.getParameter("pageSize");
String key="";
try {
key = (keyStr==null?"":new String(keyStr.getBytes("iso-8859-1"),"utf-8"));
} catch (UnsupportedEncodingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
这样,能保证,在jsp到action的编码不会出现乱码。
然后,在dao端,通过HQL进行中文模糊匹配检索,代码如下:
public List findLikeKey(String key) {
log.debug("finding all Pois instances");
try {
//'%"+key+"%'
String queryString = "from Pois as poi where poi.poiname like
'%"+key+"%'";
Query queryObject = getSession().createQuery(queryString);
// queryObject.setString(0, "'%"+key+"'");
log.info("query String is : "+queryObject.getQueryString());
return queryObject.list();
} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
}
这样就可以实现检索的模糊匹配。
这样就OK了。
|----------------------------------------------------------------------------------------|
版权声明 版权所有 @zhyiwww
引用请注明来源 http://www.blogjava.net/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2008-09-09 16:40
zhyiwww 阅读(1044)
评论(0) 编辑 收藏 所属分类:
java basic