java处理oracle的Clob字段类型的坑和2种解决办法

简介: java处理oracle的Clob字段类型的坑和2种解决办法

一、前言

我们有时候查询oracle语句的时候,oracle有些字段是大字段Clob类型,这样的数据我们第一种方式是可以通过to_char(clob字段)将数据查出来,那如果我们直接查询的话,在java层应该怎么处理clob字段呢

二、处理方式

第一种方式(不建议,有小缺陷):拼接数据流

可以通过stream流将clob字段,拼接起来,这样对于一些简单的数据是没有问题的,但是有时候会碰到clob字段的数据,带一些特殊字符,比如换行、空格等格式的话,解析出来的数据是不带空格和换行的,那这样的数据就是有问题的,和原来的不符合

@SneakyThrows
    private String clobToString(Clob clob){
        String res= "";
        Reader is = clob.getCharacterStream();
        BufferedReader br = new BufferedReader(is);
        String s = br.readLine();
        StringBuffer sb = new StringBuffer();
        while (s != null) {
            sb.append(s);
            s = br.readLine();
        }
        res= sb.toString();
        if (br!=null){
            br.close();
        }
        if (is!=null){
            is.close();
        }
        return res;
    }

第二种方式(推荐):getSubString

可以直接通过clob的提供的方法进行处理,非常的方便,但是一定要注意判空,通过下面的这种方式处理,即使有换行、空格等特殊字符出现的时候,都能够原模原样的保存到新的字段当中

比如判空处理:

dataMap.get("clobcloumn") == null ? "" : StringUtils.substring(ComUtils.clobToString((Clob) dataMap.get("clobcloumn")), 0, 1333)

截取1333是为了保存到新的字段varchar2(4000)的时候,避免超出长度

clobToString()方法:

/**
     * Clob字段处理
     *
     * @param clob
     * @return
     */
    public static String clobToString(Clob clob) {
        String content = "";
        try {
            content = clob.getSubString((long) 1, (int) clob.length());
        } catch (Exception e) {
            log.error("转换异常:", e);
        }
        return content;
    }
相关文章
|
7月前
|
SQL Oracle 关系型数据库
java往oracle存clob类型的值时,字符长度过长怎么办?
java往oracle存clob类型的值时,字符长度过长怎么办?
452 1
|
3月前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
679 18
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
|
4月前
|
网络协议 Java 编译器
Java常见异常及对应解决办法
Java常见异常及对应解决办法
64 10
|
5月前
|
Java
关于idea报错:Cannot determine path to 'tools.jar' library for 17 (E:\java-jdk\jdk17)的解决办法
关于idea报错:Cannot determine path to 'tools.jar' library for 17 (E:\java-jdk\jdk17)的解决办法
|
4月前
|
分布式计算 Oracle 关系型数据库
实时计算 Flink版产品使用问题之获取Oracle的数据时无法获取clob类型的数据,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7月前
|
Java
IDEA Error:java: Compilation failed: internal java compiler error 解决办法
IDEA Error:java: Compilation failed: internal java compiler error 解决办法
211 0
|
7月前
|
Oracle 关系型数据库 Java
java操作多数据源将oracle数据同步达梦数据库
java操作多数据源将oracle数据同步达梦数据库
|
7月前
|
Java Spring
java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter 报错的解决办法
java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter 报错的解决办法
387 0
|
7月前
|
缓存 Java 开发工具
Error:java: Compilation failed: internal java compiler error 解决办法
Error:java: Compilation failed: internal java compiler error 解决办法
92 0
|
7月前
|
Oracle 关系型数据库 数据库
Flink Sink to Oracle 存在字段CLOB类型,如何处理错误”ORA-01461: 仅能绑定要插入LONG的LONG值“
做Flink CDC同步数据过程中,目标是Oracle数据库,其中某个字段较大被设置为CLOB类型,其中会遇到异常,”ORA-01461: 仅能绑定要插入LONG的LONG值“

推荐镜像

更多