【Oracle】【35】BLOB字段和CLOB字段

前言:

BLOB用来存储大量二进制数据。如图片、音乐等,转为二进制数再存储

CLOB用来存储大量文本数据。如HTML页面等,varchar2最大是4000,预计会超过4000的用Clob

正文:

1,我用的是java + mybatis,直接用String处理就可以了。String最大能存4G

数据库:创建表

-- Create table
create table CLOB_TEST
(
  id      VARCHAR2(32) default sys_guid(),
  content CLOB
)

实体类:

package com.bf.test.entity;

public class ClobTest {
    private String id;

    private String content;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

}

查询语句:sql.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bf.labor.dao.IClobDao">
  <resultMap id="BaseResultMap" type="com.bf.test.entity.ClobTest" >
    <result column="ID" property="id" jdbcType="VARCHAR" />
    <result column="CONTENT" property="content" jdbcType="VARCHAR" />
  </resultMap>

  <select id="getList" resultMap="BaseResultMap">
    select * from CLOB_TEST
  </select>

  <insert id="insert" >
    insert into CLOB_TEST (CONTENT)
    values (#{content})
  </insert>

</mapper>

测试类:

package com.test;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

import com.bf.labor.entity.ClobTest;
import com.bf.labor.service.ClobService;

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration("web")
@ContextConfiguration(locations = "file:G:/WIM/Source/webapp/WEB-INF/spring-core-config.xml")
public class ClobServiceTest {
    @Autowired private ClobService clobService;

    @Test
    public void test() {
        List<ClobTest> list = this.clobService.getList();
        System.out.println("test=" + list);
    }

    @Test
    public void test2() {
        String str = "";
        for (int i = 0; i < 5000; i++) {
            str = str + "正";
        }
        System.out.println("str=" + str);

        ClobTest newInfo = new ClobTest();
        newInfo.setContent(str);
        this.clobService.insert(newInfo);
    }
}

2,Clob字段转换成字符串。数据库数据迁移的时候要格外注意这一点,不做处理的话,Clob字段的值为空

方法1:dbms_lob.substr()

注意:dbms_lob.substr(content),超过4000字符,会报错

参考博客:

Oracle中将Clob字段转换成字符串 - sqyNick - CSDN博客
https://blog.csdn.net/u010670151/article/details/52210333

原文地址:https://www.cnblogs.com/huashengweilong/p/11355606.html

时间: 2024-10-10 14:46:54

【Oracle】【35】BLOB字段和CLOB字段的相关文章

Oracle中Blob转换成Clob

假如tab表中的c_xml字段原来是blob类型,我们要将其转换为clob类型,如果表中有数据的话,是无法直接通过alert语句去修改的.通过以下方法可以将blob类型的字段改为clob类型. 首先在oracle中创建一个function,代码如下: --先创建Blog转换为Clob的function CREATE OR REPLACE FUNCTION BlobToClob(blob_in IN BLOB) RETURN CLOB AS v_clob CLOB; v_varchar VARCH

解决比较Oracle中CLOB字段问题

解决比较Oracle中CLOB字段问题 Oracle中CLOB和BLOB字段虽说在开发中满足了存放超大内容的要求,但是在一些简单使用中确频频带来麻烦.CLOB中存放的是指针,并不能直接取到实际值.而SQLServer中的text字段就很方便,可以直接拿来与需要的字符串比对,象什么等于呀小于呀Like呀不在话下.可是换成Oracle就麻烦死了,要开辟一个缓存,把内容一段段读取出来后转换,难道写个where条件都这么复杂?经过多方寻求资料,终于发现一个方便简单的方法:利用dbms_lob 包中的方法

好记性不如烂笔头18-java对Oracle的CLOB字段的操作

分布式文件系统的发展很快,在Oracle中,LOB(Large Object,大型对象)类型的字段现在虽然用的没有以前那么多了.但是在一些特殊的场合,需要用它保存一些数据量非常大的业务领域(如图象.档案等),还是有不少的市场. LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(BinaryLarge Object),适用于存贮非文本的字节流数据(如程序.图象.影音等).而CLOB,即字符型大型对象(Character Large Object),则与字符集相关,适于存贮文本型的数据

解决Druid设置Oracle的Clob字段时的小坑

众所周知,Oracle有很多坑, 所以才有了去IOE. 在使用Druid做数据库连接池后,其实偶尔也会碰到小坑,这就是使用开源项目所必须去填平的.[如果使用不开源的产品,那就不是坑,而是陷阱了,你都不知道怎么去填坑] 用Druid连接池,通过JDBC往Oracle数据库的Clob字段插入数据,或者更新数据时,一个问题出现了. 类似于这样: Caused by: java.lang.ClassCastException: com.alibaba.druid.proxy.jdbc.ClobProxy

Oracle 插入超4000字节的CLOB字段的处理方法

最近在做系统开发的时候需要想Oracle数据库插入超过4000字节的CLOB字段,在网上查询了N久才发现下面的解决方案,故留存以备后查. 我们可以通过创建单独的OracleCommand来进行指定的插入,即可获得成功,这里仅介绍插入clob类型的数据,blob与此类似,这里就不介绍了,下面介绍两种办法 在通过拼组sql语句来实现数据插入的应用中,我们很有可能会遇到需要插入大型数据的情况,例如,在oracle中需要插入字节数超过4000的字段内容时,我们如果通过简单的拼组sql语句来实现插入,显然

【Oracle】给clob字段插入数据

// 插入 //OracleCommand cmd = "insertInto into GIS_PolygonPoint(PCode,PointColl) values('140134', :var)"; // 修改 //OracleCommand cmd = new OracleCommand("update yd_line set coord=:coordstr where lineid=" + LineId.ToString(), conn); string

如何通过sql的insert语句插入大量字符串到oracle的clob字段?

当通过insert语句直接插入大量字符串(主要是html的内容),超过4000字符时候,就会报: ORA-01489: 字符串连接的结果过长 虽然字段是clob,足以存储,但是通过这种直接插入的时候,因为没有强制指定带插入字符串为clob类型, oracle会把插入的字符串作为 “字符串类型”处理,由于oracle有最大字符串限制(不超过4000个字符),所以会报错. 解决思路:指定待插入字符串类型为clob,可以使用过程或存储过程 例子: DECLARE REALLYBIGTEXTSTRING

Java读取/更新Oracle数据库blob字段

在写java程序过程中,如何读取Oracle数据库表某类型为blob的字段? 以下是我在写程序的时候一种解决方法.核心语句.(传上来做了修改,格式不要学习,养成良好习惯) 详细请参考: 读取序列ID:http://blog.csdn.net/yzsind/article/details/6918506 BLOB相关:http://jslfl.iteye.com/blog/1771949 http://www.linuxidc.com/Linux/2011-08/40218.htm http://

(转载)VB 查询Oracle中blob类型字段,并且把blob中的图片以流的方式显示在Image上

原文摘自:http://heisetoufa.iteye.com/blog/504068 '模块代码 Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long Private Declare Function OleLoadPicture Lib "olepro3