首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

对Mybatis数据库数据查询乱码处置

2012-06-29 
对Mybatis数据库数据查询乱码处理Java代码public class StringTypeHandler implements TypeHandlerObject

对Mybatis数据库数据查询乱码处理
Java代码

public class StringTypeHandler implements TypeHandler<Object> {    private static Logger logger = org.slf4j.LoggerFactory.getLogger(StringTypeHandler.class);    private static String ISO88591_ENCODE = "ISO8859_1";    private static String UTF8_ENCODE = "UTF-8";    private static String GBK_ENCODE = "GBK";    public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {        try {            String paramStr = null;            if (null != parameter) {                paramStr = (String) parameter;                if (GBK_ENCODE.equals(getEncode(paramStr))) {                    if (null != parameter) {                        ps.setString(i, new String(((String) parameter).getBytes(GBK_ENCODE), ISO88591_ENCODE));                    }                }            }            else {                ps.setString(i, (String) parameter);            }        } catch (UnsupportedEncodingException e) {            ps.setString(i, (String) parameter);            logger.debug("StringTypeHandler encode Exception");        }    }    public Object getResult(ResultSet rs, String columnName) throws SQLException {        try {            if (null != rs.getString(columnName)) {                String columnValue = rs.getString(columnName);                if (ISO88591_ENCODE.equals(getEncode(columnValue))) {                    return new String(rs.getString(columnName).getBytes(ISO88591_ENCODE), GBK_ENCODE);                }            }        } catch (UnsupportedEncodingException e) {            logger.debug("StringTypeHandler encode Exception");        }        return rs.getString(columnName);    }    public Object getResult(CallableStatement cs, int columnIndex) throws SQLException {        return cs.getString(columnIndex);    }    //返回编码格式    private String getEncode(String str) {        String encode = null;        if (verifyEncode(str, GBK_ENCODE)) {            encode = GBK_ENCODE;        } else if (verifyEncode(str, ISO88591_ENCODE)) {            encode = ISO88591_ENCODE;        } else if (verifyEncode(str, UTF8_ENCODE)) {            encode = UTF8_ENCODE;        }         return encode;    }    //判断编码格式是否相符    private boolean verifyEncode(String str, String encode) {        try {            if (str.equals(new String(str.getBytes(encode), encode))) {                return true;            }        } catch (UnsupportedEncodingException e) {            logger.debug("StringTypeHandler encode UnsupportedEncoding");        }        return false;    }


配置文件
   <typeHandlers>          <typeHandler javaType="String" jdbcType="VARCHAR"    handler="com.betdemo.interceptor.StringTypeHandler" />   </typeHandlers>

热点排行