问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/qq_35754073/article/details/137587842

CLOB(Character Large Object)是一种用于存储大型文本数据的数据类型,在数据库开发中有着广泛的应用。本文将详细介绍CLOB的定义、应用场景、存储特点以及如何使用JDBC读取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 中,可以使用
    MEDIUMTEXT

    LONGTEXT
    数据类型来存储 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());
        }
    }
  
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号