Clob数据类型解析及读取转换

请添加图片描述

1.简介

CLOB(Character Large Object) 是指用于存储大型文本数据的数据类型。与之对应的另一个数据类型是 BLOB,指的是二进制大型对象。CLOB 类型在实际应用中非常广泛,尤其是在存储长篇文字、图书、电子邮件以及其他类似数据时,能够提供很大的便利性。

1.1.内容类型

类型描述
文本文档CLOB字段可以存储大型的文本文档,如书籍、说明文档、报告等。这些文本文档通常包含不同的段落、标题、标签、索引等,可以通过CLOB字段进行保存和检索
XML文档XML是一种用于表示结构化数据的标记语言,CLOB字段可以存储包含大量XML标签的文档。XML文档经常使用CLOB字段存储在数据库中,以便进行XML解析、查询和更新操作
JSON数据JSON是一种轻量级的数据交换格式,CLOB字段可以用于存储大量的JSON数据。JSON数据经常用于Web应用程序之间的数据交换,通过CLOB字段可以方便地存储和处理这些数据
日志文件CLOB字段也可用于存储大型的日志文件,如应用程序的运行日志、系统日志、错误日志等。日志文件通常包含大量的文本信息,通过CLOB字段可以有效地保存这些信息并支持快速的查询和分析
HTML文档CLOB字段还可用于存储一些富文本内容,比如HTML文档。HTML文档可以包含各种标签和样式,以实现更丰富的文本格式和布局。通过CLOB字段,可以将HTML文档存储在数据库中,并在需要时进行检索和呈现
长文本字段除以上内容类型外,CLOB字段还可用于存储长度超过数据库普通字段长度(如VARCHAR2)限制的长文本。一些应用场景中,可能需要存储一些包含大量字符的文本内容,例如用户的评论、文章内容等,CLOB字段可以满足这种需求

1.2.存储

  • Oracle 数据库中,可以使用 CLOB 数据类型存储最多 4 GB 的文本。而在其他数据库中,CLOB 的容量限制可能会有所不同。
  • MySQL 中,可以使用 MEDIUMTEXTLONGTEXT 数据类型来存储 CLOB 类型的数据,其中 MEDIUMTEXT 最多可存储 16 MB 的数据,而 LONGTEXT 最多可存储 4 GB 的数据。
  • 于其他数据类型,如 VARCHAR 或 TEXT,CLOB 存储需要更多的空间和资源。CLOB 数据类型需要更大的物理空间,在硬盘和内存方面都需要更多的资源,因此在进行数据存储和读取时可能会略有延迟。但是,相较于其他的数据类型,CLOB 类型能够提供更大的存储空间,并支持更高的性能和扩展性

1.3.优缺点

  • 优点:
    1. 更好的存储能力:CLOB 数据类型能够存储更大的文本数据,可以比 VARCHAR 类型存储更多的字符串。
    2. 更好的数据可读性:由于 CLOB 数据类型存储的是文本类型数据,因此更适合用于存储一些易于阅读的模板或模版化的文本数据。
    3. 更好的应用支持:使用 CLOB 数据类型可以方便地支持诸如邮件和文档等应用类型。
  • 缺点:
    1.更大的存储需求:CLOB 数据类型需要更多的硬件资源,这可能会导致数据库在存储和读取 CLOB 数据时的性能受到影响。
    2. 大量的读写延迟:由于 CLOB 数据类型需要更多的硬件资源,因此读写延迟可能会较大。
    3. 数据存储时的限制:CLOB 数据类型的存储需要在数据库中创建一个单独的列,而且只能用于保存文本数据。

CLOB 数据类型存储需要更多的硬件资源,因此,对于一些要求高效的应用,可能不太适用。但是,从扩展性可读性方面来看,CLOB 数据类型是非常有价值的。它可以存储更多的数据,更容易阅读和支持不同的应用程序

2.读取clob

使用jdbc连接的实例:

 private static List<Map<String, Object>> getList(ResultSet rt) throws SQLException {
        List<Map<String, Object>> list = new ArrayList<>();
        ResultSetMetaData md = rt.getMetaData();
        int columnCount = md.getColumnCount();
        val colNames = getColNames(md, columnCount);
        //遍历结构集
        while (rt.next()) {
            Map<String, Object> rowData = new LinkedHashMap<>();
            for (int i = 0; i < columnCount; i++) {
                val colName = colNames.get(i);
                Object value = rt.getObject(colName);
                // 判断是否为Clob数据类型
                if (value instanceof Clob) {
                    value = parseClob((Clob) value);
                }
                rowData.put(colName, value);
            }
            list.add(rowData);
        }
        return  list;
    }

 /**
 *	读取Clob类型的数据并转换为String
 */
 private static String parseClob(Clob clob) {
        try {
            Reader is = clob.getCharacterStream();// 得到流
            BufferedReader br = new BufferedReader(is);
            String s = br.readLine();
            StringBuilder sb = new StringBuilder();
            while (s != null) {
                sb.append(s);
                s = br.readLine();
            }
            return sb.toString();
        } catch (SQLException | IOException e) {
            log.error("clob转换发生异常", e);
            throw new Exception(clob转换发生异常."+ e.getMessage());
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值