文档章节

Mybatis 数据库Blob字段乱码问题

w
 whtzhang
发布于 2016/07/19 13:50
字数 247
阅读 53
收藏 2
点赞 0
评论 0

mapper.xml中

设置Blob字段

<result property="tibetan_info" column="tibetan_info" typeHandler="com.surfilter.utils.ConvertBlobTypeHandler"/>

 

ConvertBlobTypeHandler.java

 

package com.surfilter.utils;

 

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;  

    }    

}   

本文转载自:

共有 人打赏支持
w
粉丝 0
博文 9
码字总数 414
作品 0
武汉
MySQL出现乱码的解决办法

这几天用到MySQL,用的Navicat for MySQL作为界面工具。建了一个数据库,里边有个book表。今天把book导成sql文件,发现其中的插入语句如下: INSERT INTO VALUES ('BRRN1001', 0x4323B4D3C8...

双子座 ⋅ 2011/10/25 ⋅ 0

MyBatis如何存取图片

这个问题困扰了好久,终于找到了解决办法。肯能这问题对于老鸟们来说很简单。但是对于我这个初学者来说是不简单的!在此记录一下,也算是在IT路上的一个成长点! 环境:Mybatis+sqlite 目的:...

第三类别生物 ⋅ 2013/03/11 ⋅ 0

使用mysql group_concat函数的陷阱

开发中我的mysql 中使用了group_concat,然后导出的内容发现是乱码,如下图 运行了下sql语句,发现records字段和needs字段类型是blob二进制类型 BLOB (binary large object),二进制大对象,...

chenfj_fer ⋅ 01/24 ⋅ 0

MyBatis Generator 学习说明配置

eclipse 里面使用maven 生成 ,命令: 工程右键 Debug As -> maven build... -> mybatis-generator:generate http://blog.csdn.net/u011310774/article/details/48269031 使用这个可以 快速自......

之渊 ⋅ 2016/11/04 ⋅ 0

JDBC读取MySQL的BLOB类型

今天写了个SQL查数据库,需要根据id分组,然后将同一分组中某几列的值都平铺开来,网络上查了下,MySQL中的 GROUP_CONCAT 函数,还是很好用的,SQL 大致写成如下: select , GROUPCONCAT(con...

Breath_L ⋅ 2012/06/21 ⋅ 3

mysql word blob 读取

求救: word文件保存中mysql blob字段中.. 读取另存为word 文件, 文件内容全是乱码 数据库blob字段内容: 444952470000000000000001000000D0CF11E0A13F000000000000000000000000000000003E000...

哈密瓜 ⋅ 2011/05/17 ⋅ 1

教你如何连接oracle数据库

一、在配置文件中,存放oracle连接字符串 1.连接字符串: "data source=127.0.0.1/TEST;user id=xxx;password=xxx;provider='OraOLEDB.Oracle'" 2.provider[提供商],有两种:'OraOLEDB.Ora...

为自己插上翅膀 ⋅ 01/22 ⋅ 0

Mybatis-Plus 2.0.9 发布,简化开发 mybatis 快速入门

Mybatis-Plus是一款 myBatis 动态 sql 自动注入 crud 简化 增 删 改 查 操作中间件。启动加载 XML 配置时注入 mybatis 单表 动态 sql 操作 ,为简化开发工作、提高生产率而生。Mybatis-Plus ...

青苗 ⋅ 2017/06/26 ⋅ 13

ORM规约变更经典案例---mysql军规

  先介绍一下《MySQL数据库开发的三十六条军规》,出自58赶集。 写在前面的话: 总是在灾难发生后,才想起容灾的重要性; 总是在吃过亏后,才记得曾经有人提醒过。 (一)核心军规 (1)不在数...

静儿1986 ⋅ 06/12 ⋅ 0

java通过mybatis往mysql数据库插入数据乱码

今天发现了一个问题,通过mybatis往数据库插入数据后,在数据库中所插入的中文乱码,开始以为是mysql编码设置问题,于是设置了mysql数据库的编码,但是不起作用,自己写的sql语句有中文插入也...

留给明天 ⋅ 2016/01/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

DevOps 资讯 | PostgreSQL 的时代到来了吗 ?

PostgreSQL是对象-关系型数据库,BSD 许可证。拼读为"post-gress-Q-L"。 作者: Tony Baer 原文: Has the time finally come for PostgreSQL?(有删节) 近30年来 PostgreSQL 无疑是您从未听...

RiboseYim ⋅ 6分钟前 ⋅ 0

Cube、Cuboid 和 Cube Segment

1.Cube (或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过 Cube 对数据进行分析,可以大大加快数据的查询效率 2.Cuboid 在 Kylin 中特...

无精疯 ⋅ 44分钟前 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 46分钟前 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 56分钟前 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 59分钟前 ⋅ 0

Redis 注册为 Windows 服务

Redis 注册为 Windows 服务 redis 注册为 windows 服务相关命令 注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 启动服务 re......

Os_yxguang ⋅ 今天 ⋅ 0

世界那么大,语言那么多,为什么选择Micropython,它的优势在哪?

最近国内MicroPython风靡程序界,是什么原因导致它这么火呢?是因为他功能强大,遵循Mit协议开源么? 错!因为使用它真的是太舒服了!!! Micropython的由来,这得益于Damien George这位伟大...

bodasisiter ⋅ 今天 ⋅ 0

docker 清理总结

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉) docker rm $(docker ps -a -q) 删除所有未打 dangling 标...

vvx1024 ⋅ 今天 ⋅ 0

关于学习

以前学车的时候,教练说了这样的一句话:如果一个人坐在车上一直学,一直学,反而不如大家轮流着学。因为一个人一直学,就没有给自己留空间来反思和改进。而轮流着学的时候大家下来之后思考上...

mskk ⋅ 今天 ⋅ 0

压缩工具之gzip-bzip2-xz

win下常见压缩工具:rar zip 7z linux下常见压缩工具:zip gz bz2 xz tar.gz tar.bz2 tar.xz gzip 不支持目录压缩 gzip 1.txt #压缩。执行后1.txt消失,生成1.txt.gz压缩文件 gzip -d 1.txt....

ZHENG-JY ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部