oracle blob和 varchar2互相转换,mybatis 读取blob乱码等相关问题总结

简介: oracle blob和 varchar2互相转换,mybatis 读取blob乱码等相关问题总结

utl_raw.cast_to_raw

Oracle字符集查询

8.pngNLS_CHARACTERSET是数据库字符集,NLS_NCHAR_CHARACTERSET是国家字符集

ORACLE中有两大类字符型数据,VARCHAR2是按照数据库字符集来存储数据。而NVARCHAR2是按照国家字符集存储数据的。同样,CHAR和NCHAR也一样,一是数据库字符符,一是国家字符集。

字符集不同,二进制码的组合就不同


需求要求varchar2 加工插入blob

采用 utl_raw.cast_to_raw(‘你好啊’),


mybatis 读取byte[] 转string

package com.hcp.util;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.sql.*;
public class BlobToStringTypeHandler extends BaseTypeHandler<String> {
    private static final String DEFAULT_CHARSET = "gbk";
    // 这里和数据库编码一直,否则乱码、 实体保存的时候也要 getBytes("gbk")
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, parameter);
    }
    @Override
    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
        Blob blob = rs.getBlob(columnName);
        return handle(blob);
    }
    @Override
    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        Blob blob = rs.getBlob(columnIndex);
        return handle(blob);
    }
    @Override
    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        Blob blob = cs.getBlob(columnIndex);
        return handle(blob);
    }
    private String handle( Blob blob)throws SQLException{
        try {
            return blob == null?null:new String(blob.getBytes(1, (int)blob.length()),DEFAULT_CHARSET);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return  null;
    }
}
<resultMap  id="ResultMapWithHcpPjyjCx" type="HcpPjyjCx">
    <id column="PJYJXH" jdbcType="VARCHAR" property="pjyjxh" />
    <result column="PJJGXH" jdbcType="VARCHAR" property="pjjgxh" />
    <result column="PJLY_DM" jdbcType="VARCHAR" property="pjlyDm" />
    <result column="PJLYMC" jdbcType="VARCHAR" property="pjlyMc" />
    <result column="YJJY" jdbcType="BLOB" property="yjjy" />
    <result property="yjjynr" column="YJJYNR" jdbcType="BLOB"  typeHandler="com.hcp.util.BlobToStringTypeHandler"></result>
  </resultMap>
相关文章
|
6月前
|
Oracle Java 数据库连接
使用Mybatis generator自动生成代码,仅限Oracle数据库
使用Mybatis generator自动生成代码,仅限Oracle数据库
|
4月前
|
Oracle 关系型数据库 Java
mybatis使用statement.getGenreatedKeys(); useGeneratedKeys=”true”;使用自增主键获取主键值策略和Oracle不支持自增,Oracle使用序列
mybatis使用statement.getGenreatedKeys(); useGeneratedKeys=”true”;使用自增主键获取主键值策略和Oracle不支持自增,Oracle使用序列
|
6月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
142 0
|
5月前
|
SQL 数据采集 Oracle
实时计算 Flink版产品使用问题之如何读取oracle中的blob类型的数据
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
Oracle 关系型数据库 Linux
解决oracle数据库乱码
解决oracle数据库乱码
|
6月前
mybatis-plus使用oceanbase-oracle模式
mybatis-plus使用oceanbase-oracle模式
493 2
|
6月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之如何将Oracle中的BLOB数据类型转换为byte数组
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
Oracle Java 关系型数据库
SpringBoot整合Mybatis连接Oracle数据库
SpringBoot整合Mybatis连接Oracle数据库
SpringBoot整合Mybatis连接Oracle数据库
|
11月前
|
Oracle 关系型数据库 数据库
oracle varchar2 只能存数字,不能存英文和字母
oracle varchar2 只能存数字,不能存英文和字母
86 0
|
Oracle 关系型数据库 Java
Mybatis JdbcType与Oracle、MySql数据类型对应列表
Mybatis JdbcType与Oracle、MySql数据类型对应列表
197 0