富文本编辑器是将样式及内容一起放入数据库,所用数据类型为blob型,在数据装入数据库及从数据库中读取时应注意编码格式问题,以防止出现乱码。出现乱码时主要解决手段:
1.查看创建blob对象是不是用的“utf8”编码格式
2.查询时是否进行了二次编码解析,主要体现在mapper.xml文件中。blob对应字段要进行处理,处理内容如下:
- package cn.ffcs.drive.common.util;
- import java.io.ByteArrayInputStream;
- import java.io.UnsupportedEncodingException;
- import java.sql.Blob;
- import java.sql.CallableStatement;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import org.apache.ibatis.type.BaseTypeHandler;
- import org.apache.ibatis.type.JdbcType;
- /**
- * className:ConvertBlobTypeHandler
- *
- * 自定义typehandler,解决mybatis存储blob字段后,出现乱码的问题
- * 配置mapper.xml:
- * <result typeHandler="cn.ffcs.drive.common.util.ConvertBlobTypeHandler"/>
- *
- * @author pengyh
- * @version 1.0.0
- * @date 2014-07-09 11:15:23
- *
- */
- public class ConvertBlobTypeHandler extends BaseTypeHandler<String> {
- //###指定字符集
- private static final String DEFAULT_CHARSET = "utf-8";
- @Override
- public void setNonNullParameter(PreparedStatement ps, int i,
- String parameter, JdbcType jdbcType) throws SQLException {
- ByteArrayInputStream bis;
- try {
- //###把String转化成byte流
- bis = new ByteArrayInputStream(parameter.getBytes(DEFAULT_CHARSET));
- } catch (UnsupportedEncodingException e) {
- throw new RuntimeException("Blob Encoding Error!");
- }
- ps.setBinaryStream(i, bis, parameter.length());
- }
- @Override
- public String getNullableResult(ResultSet rs, String columnName)
- throws SQLException {
- Blob blob = rs.getBlob(columnName);
- byte[] returnValue = null;
- if (null != blob) {
- returnValue = blob.getBytes(1, (int) blob.length());
- }
- try {
- //###把byte转化成string
- return new String(returnValue, DEFAULT_CHARSET);
- } catch (UnsupportedEncodingException e) {
- throw new RuntimeException("Blob Encoding Error!");
- }
- }
- @Override
- public String getNullableResult(CallableStatement cs, int columnIndex)
- throws SQLException {
- Blob blob = cs.getBlob(columnIndex);
- byte[] returnValue = null;
- if (null != blob) {
- returnValue = blob.getBytes(1, (int) blob.length());
- }
- try {
- return new String(returnValue, DEFAULT_CHARSET);
- } catch (UnsupportedEncodingException e) {
- throw new RuntimeException("Blob Encoding Error!");
- }
- }
- @Override
- public String getNullableResult(ResultSet arg0, int arg1)
- throws SQLException {
- // TODO Auto-generated method stub
- return null;
- }
- }
定义上面类之后,在mapper.xml中配置<result property="content" column="CONTENT" typeHandler="cn.ffcs.drive.common.util.ConvertBlobTypeHandler"/>即可。
实体接收使用String接收。
转载自http://blog.csdn.net/p793049488/article/details/37818989