广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >oracle中读写blob字段的问题解析
  • 910
分享到

oracle中读写blob字段的问题解析

oracleblob 2022-11-15 23:11:59 910人浏览 安东尼
摘要

LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对像(Binary Large Object),适用于存贮非文本的字节流数据(如程序、图像、影音等)。而CLOB,即字符型大

LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对像(Binary Large Object),适用于存贮非文本的字节流数据(如程序、图像、影音等)。而CLOB,即字符型大型对像(Character Large Object),则与字符集相关,适于存贮文本型的数据(如歷史档案、大部头著作等)。
下面以程序实例说明通过JDBC操纵oracle数据库LOB类型字段的几种情况。

先建立如下两个测试用的数据库表,Power Designer PD模型如下:

建表sql语句为:
CREATE TABLE TEST_CLOB ( ID NUMBER(3), CLOBCOL CLOB)
CREATE TABLE TEST_BLOB ( ID NUMBER(3), BLOBCOL BLOB)

一、 CLOB对象的存取

1、往数据库中插入一个新的CLOB对像


public static void clobInsert(String infile) throws Exception
{

boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {

stmt.executeUpdate("INSERT INTO TEST_CLOB VALUES ('111', EMPTY_CLOB())");

ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE");
while (rs.next()) {

oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");

BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
BufferedReader in = new BufferedReader(new FileReader(infile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}

conn.commit();
} catch (Exception ex) {

conn.rollback();
throw ex;
}


conn.setAutoCommit(defaultCommit);
}

2、修改CLOB对像(是在原CLOB对像基础上进行覆盖式的修改)


public static void clobModify(String infile) throws Exception
{

boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {

ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE");
while (rs.next()) {

oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");

BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
BufferedReader in = new BufferedReader(new FileReader(infile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}

conn.commit();
} catch (Exception ex) {

conn.rollback();
throw ex;
}


conn.setAutoCommit(defaultCommit);
}

3、替换CLOB对像(将原CLOB对像清除,换成一个全新的CLOB对像)


public static void clobReplace(String infile) throws Exception
{

boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {

stmt.executeUpdate("UPDATE TEST_CLOB SET CLOBCOL=EMPTY_CLOB() WHERE ID='111'");

ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE");
while (rs.next()) {

oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");

BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
BufferedReader in = new BufferedReader(new FileReader(infile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}

conn.commit();
} catch (Exception ex) {

conn.rollback();
throw ex;
}


conn.setAutoCommit(defaultCommit);
}

4、CLOB对像读取


public static void clobRead(String outfile) throws Exception
{

boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {

ResultSet rs = stmt.executeQuery("SELECT * FROM TEST_CLOB WHERE ID='111'");
while (rs.next()) {

oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");

BufferedReader in = new BufferedReader(clob.getCharacterStream());
BufferedWriter out = new BufferedWriter(new FileWriter(outfile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
out.close();
in.close();
}
} catch (Exception ex) {
conn.rollback();
throw ex;
}


conn.setAutoCommit(defaultCommit);
}

二、 BLOB对象的存取

1、 向数据库中插入一个新的BLOB对像


public static void blobInsert(String infile) throws Exception
{

boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {

stmt.executeUpdate("INSERT INTO TEST_BLOB VALUES ('222', EMPTY_BLOB())");

ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE");
while (rs.next()) {

oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");

BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}

conn.commit();
} catch (Exception ex) {

conn.rollback();
throw ex;
}

conn.setAutoCommit(defaultCommit);
}

2、修改BLOB对像(是在原BLOB对像基础上进行覆盖式的修改)


public static void blobModify(String infile) throws Exception
{

boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {

ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE");
while (rs.next()) {

oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");

BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}

conn.commit();
} catch (Exception ex) {

conn.rollback();
throw ex;
}


conn.setAutoCommit(defaultCommit);
}

3、替换BLOB对像(将原BLOB对像清除,换成一个全新的BLOB对像)


public static void blobReplace(String infile) throws Exception
{

boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {

stmt.executeUpdate("UPDATE TEST_BLOB SET BLOBCOL=EMPTY_BLOB() WHERE ID='222'");

ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE");
while (rs.next()) {

oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");

BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}

conn.commit();
} catch (Exception ex) {

conn.rollback();
throw ex;
}


conn.setAutoCommit(defaultCommit);
}

4、BLOB对像读取


public static void blobRead(String outfile) throws Exception
{

boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {

ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222'");
while (rs.next()) {

oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outfile));
BufferedInputStream in = new BufferedInputStream(blob.getBinaryStream());
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}

conn.commit();
} catch (Exception ex) {

conn.rollback();
throw ex;
}


conn.setAutoCommit(defaultCommit);
}


观察上述程序对LOB类型字段的存取,我们可以看出,较之其它类型字段,有下面几个显著不同的特点:

一是必须取消自动提交。

--结束END--

本文标题: oracle中读写blob字段的问题解析

本文链接: https://www.lsjlt.com/news/172819.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle中读写blob字段的问题解析
    LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对像(Binary Large Object),适用于存贮非文本的字节流数据(如程序、图像、影音等)。而CLOB,即字符型大...
    99+
    2022-11-15
    oracle blob
  • 解决MyBatis中Enum字段参数解析问题
    目录基础Class和TypeHandler请求参数解析问题问题解决基础Class和TypeHandler MyBatis操作的基本User对象结构如下: @Data @Alia...
    99+
    2022-11-12
  • 如何解决MyBatis中Enum字段参数解析问题
    小编给大家分享一下如何解决MyBatis中Enum字段参数解析问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!基础Class和TypeHandlerMyBati...
    99+
    2023-06-20
  • mybatis 实体类字段大小写问题 字段获取不到值的解决
    目录mybatis实体类字段大小写问题 字段获取不到值解决办法推断踩坑mybatis 转换大小写问题解决方法mybatis实体类字段大小写问题 字段获取不到值 由于前期设计问题,项目...
    99+
    2022-11-12
  • MybatisPlus保存、读取MySQL中的json字段失败问题及解决
    目录MybatisPlus保存、读取MySQL的json字段失败场景解决方案Mybatis插入MySQL的json字段报错解决办法MybatisPlus保存、读取MySQL的json...
    99+
    2022-11-13
  • MySql中的longtext字段的返回问题及解决
    目录mysql中longtext字段的返回如下图所示解决方法Mysql中Text字段的范围汉字在utf8mb4中占用几个字符MySql中longtext字段的返回 最近开发中用到了longtext这种字段。在mysq...
    99+
    2022-07-05
    MySql中longtext字段 longtext字段返回 MySql的longtext
  • MySql中的longtext字段的返回问题如何解决
    这篇文章主要介绍了MySql中的longtext字段的返回问题如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySql中的longtext字段的返回问题如何解决文章都会有所收获,下面我们一起来看看吧。M...
    99+
    2023-07-02
  • C语言中读写交替时出现的问题分析
    目录总结“+”模式添加的不同显示结果a+和a对比分析:a+可读写的文件出现的问题读和写命令转换时也会出现问题,总结  1. 读写命令交替,一定要使用...
    99+
    2022-12-08
    c语言读写交替 交替读写问题
  • 解析Zabbix 5.0磁盘自动发现和读写监控的问题
    自动发现磁盘 配置键值 注意:此键值仅支持Linux平台。 此发现键值返回两个宏 : {#DEVNAME} :设备名 {#DEVTYPE} :设备类型 例如: ...
    99+
    2022-11-12
  • 读写json中文ASCII乱码问题的解决方法
    今天要帮前端写一个小后台,就是读取数据然后转成json送给他,让他去展示。数据很简单,但是处理的时候遇到了一个问题,文件中涉及到了中文的处理,每次处理完写的json格式就是ASCII码,完全没办法用。代码如...
    99+
    2022-06-04
    乱码 解决方法 中文
  • 解决python3 json数据包含中文的读写问题
    python3 默认的是UTF-8格式,但在在用dump写入的时候仍然要注意:如下 import json data1 = { "TestId": "testcase001",...
    99+
    2022-11-12
  • oracle中如何解决导出含clob字段表报错快照过旧问题
    小编给大家分享一下oracle中如何解决导出含clob字段表报错快照过旧问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 导出含clob字段的表数据,报快照过...
    99+
    2022-10-19
  • PHP中字段数据超过4113字符后的数据异常问题解决
        环境信息: 操作系统:LNMP1.6 PHP 版本:5.3.29(NTS) 达梦客户端版本:DM_V7.6.0.161客户端 PHP 模块:libphp53_dm.so...
    99+
    2022-10-18
  • 如何解决struts2中Action名字的大小写的问题
    本篇文章给大家分享的是有关如何解决struts2中Action名字的大小写的问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言今天在使用struts框架编写Action类以...
    99+
    2023-05-31
    struts2 action ct
  • mysql中查询字段为null的数据navicat问题怎么解决
    这篇“mysql中查询字段为null的数据navicat问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mysql...
    99+
    2023-07-04
  • 如何解析Oracle 12c PDB中碰到的DG问题
    如何解析Oracle 12c PDB中碰到的DG问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 Orac...
    99+
    2022-10-19
  • 解决django 向mysql中写入中文字符出错的问题
    之前使用django+mysql建立的一个站点,发现向数据库中写入中文字符时总会报错,尝试了修改settings文件和更改数据表的字符集后仍不起作用。最后发现,在更改mysql的字符集后,需要重建数据库,才能起作用。...
    99+
    2022-06-01
    django mysql 写入中文
  • java只返回实体类中的部分字段问题如何解决
    这篇文章主要介绍了只返回实体类中的部分字段问题如何解决,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。如何只返回实体类中的部分字段在实体类上添加注解@JsonInclude(JsonInclude.Include.NON_...
    99+
    2023-07-06
  • 如何解决MySQL中主从延迟与读写分离的问题
    小编给大家分享一下如何解决MySQL中主从延迟与读写分离的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言:我们都知道互联网数据有个特性,大部分场景都是 读...
    99+
    2023-06-29
  • 如何解析Oracle中exists与in的执行效率问题
    如何解析Oracle中exists与in的执行效率问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。in 是把外表和内表作ha...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作