Oracle35BLOB字段和CLOB字段

Posted huashengweilong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle35BLOB字段和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

 

以上是关于Oracle35BLOB字段和CLOB字段的主要内容,如果未能解决你的问题,请参考以下文章

oracle如何导出具有clob字段类型的sql?

oracle 如何将字段类型varchar 改为blob 更改提示数据类型的变更无效

如何在oracle中的blob字段下读取jpg格式文件保存

ODAC 组件支持 Oracle 8 的 BLOB 和 CLOB 数据类型

Sqoop处理Clob与Blob字段

CLOB和BLOB的区别