通过OracleDataReader来读取BLOB类型的数据

在实际的应用过程中,需要把大块的二进制数据存储在数据库中。读取这些大块的数据,可以通过强制类型转换成为byte数组,但是当这个二进制数据体够大时(几十兆或者上百兆),一次并不能获取到他的完整长度,所以需要分块获取。
    下面提供两种方法,供大家参考。
    1、直接将BLOB数据转换成为byte数组
   
          long blobDataSize = 0//BLOB数据体实际大小
                long readStartByte = 0;//从BLOB数据体的何处开始读取数据
                int bufferStartByte = 0;//将数据从buffer数组的何处开始写入
                int hopeReadSize = 1024//希望每次从BLOB数据体中读取数据的大小
                long realReadSize = 0;//每次实际从BLOB数据体中读取数据的大小
                
//CommandBehavior.SequentialAccess将使OracleDataReader以流的方式加载BLOB数据
                OracleDataReader dr = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
                
byte[] buffer = null;
                
while (dr.Read())
                
{
                    blobDataSize 
= dr.GetBytes(00null00); //获取这个BLOB数据体的总大小
                    buffer = new byte[blobDataSize];
                    realReadSize 
= dr.GetBytes(0, readStartByte, buffer, bufferStartByte, hopeReadSize);
                    
//循环,每次读取1024byte大小
                    while ((int)realReadSize == hopeReadSize)
                    
{
                        bufferStartByte 
+= hopeReadSize;
                        readStartByte 
+= realReadSize;
                        realReadSize
= dr.GetBytes(0, readStartByte, buffer, bufferStartByte, hopeReadSize);
                    }

                    
//读取BLOB数据体最后剩余的小于1024byte大小的数据
                    dr.GetBytes(0, readStartByte, buffer, bufferStartByte, (int)realReadSize);
                    
//读取完成后,BLOB数据体的二进制数据就转换到这个byte数组buffer上去了
                }
   
    2、将BLOB数据直接写到文件中去
   
         
                
long readStartByte = 0;//从BLOB数据体的何处开始读取数据
                int hopeReadSize = 1024//希望每次从BLOB数据体中读取数据的大小
                long realReadSize = 0;//每次实际从BLOB数据体中读取数据的大小
                
//CommandBehavior.SequentialAccess将使OracleDataReader以流的方式加载BLOB数据
                OracleDataReader dr = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
                
while (dr.Read())
                {
                    FileStream fs 
= new FileStream(filename, FileMode.Create);
                    
byte[] buffer = new byte[hopeReadSize];
                    realReadSize 
= dr.GetBytes(0, readStartByte, buffer, 0, hopeReadSize);
                    
//循环,每次读取1024byte大小,并将这些字节写入流中
                    while ((int)realReadSize == hopeReadSize)
                    {
                        fs.Write(buffer, 
0, hopeReadSize);
                        readStartByte 
+= realReadSize;
                        realReadSize
= dr.GetBytes(0, readStartByte, buffer, 0, hopeReadSize);
                    }
                    
//读取BLOB数据体最后剩余的小于1024byte大小的数据,并将这些字节写入流中
                    realReadSize= dr.GetBytes(0, readStartByte, buffer, 0, hopeReadSize);
                    fs.Write(buffer, 
0, (int)realReadSize);
                }

转载于:https://www.cnblogs.com/leodrain/archive/2008/04/29/oracledatareader-use-getbytes-to-read-blob-data.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完美的优化目标,人工智能的盲点

来源:AI科技评论译者:辛西娅编辑:维克多人工智能(AI)系统的脆弱性一直被行业人员所诟病,稍微的数据错误就会使系统发生故障。例如在图像识别中,图片微小的像素改变,不会干扰人类视觉…

C#中创建对象的方式

C#中对象创建的方式 使用new 创建使用对象的MemberwiseClone使用工厂方法创建使用序列化和反序列化创建使用反射创建使用类型推导(c# 3.0) 另外c# 3.0 中增加了一种类型扩展方法。 转载于:https://www.cnblogs.com/zzj8704/archive/2008/08/05/1260848.h…

转:Some interesting facts about SharePoint 2007 Search

Some interesting facts about SharePoint 2007 Search Published 14 November 08 06:21 PM | harikumh Can we search in any language other than English? Do we need language pack for the same? Language Pack has nothing to do with search in languages other th…

宇宙和世界真的是虚拟的吗?

来源:数学中国 2021年元宇宙无疑成为科技领域最火爆的概念之一,扎克伯格曾表示未来脸书将从一家社交媒体公司转变为一家元宇宙公司,之后元宇宙这个词席卷了整个互联网与投资圈。在大多数人还搞不懂元宇宙是什么的时候,科技公司们已…

Web高效管理多个项目的SVN仓库

转至:https://www.jianshu.com/p/a0af00642585 采用方案 LinuxApacheSubversionMySQLJDKTomcatSvnadmin 目录 0.安装准备 0.1 升级系统软件包 0.2 关闭SELinux 0.3 安装wget 1.部署Apache 1.1 安装apache 1.2 修改配置文件 1.3 启动apache服务 1.4 调整防火墙,允许8…

粒子物理学有了新的基础数学理论

来源:科技日报科技日报柏林2月13日电 (记者李山)近日,来自奥地利和英国的科学家共同发表了一个粒子物理学的基础数学新理论。他们定义和研究了黎曼曲面上存在的非常稳定的希格斯丛,其蕴涵了全局幂零锥稳定分量的多重性…

01.MyBatis入门

MyBatis入门&#xff1a; 第一天接触Mybatis&#xff0c;总结一下入门案例的流程: 首先导入Mybatis的jar包和数据库的驱动包 1.创建数据表和实体类 2.创建一个表和实体类映射的xml配置文件&#xff0c;具体配置如下&#xff1a; 1 <?xml version"1.0" encoding&q…

2022年重大颠覆性科技创新趋势报告(完整版)

来源&#xff1a;点滴科技资讯未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;大脑研究计划&#xff0c;构建互联网&#xff08;城市&#xff09;大脑技术和企业…

02.Mybatis的动态代理方式实现增删改查

动态代理的方式实现增删改查: 通过约定的方式定位sql语句 约定 > 配置文件 > 硬编码 约定的目标是省略掉通过硬编码的方式定位sql的代码&#xff0c;通过接口直接定位出sql语句,以下代码为通过硬编码的方法定位sql: 1      //读取conf.xml 配置文件2 Reader…

孙正义看未来30年:这个趋势,永远不会错(附完整PPT)

来源&#xff1a;大数据实验室 对于今后30年来讲&#xff0c;我认为现在是个很关键的时刻&#xff0c;尤其是在各位的人生当中。而且现在是一整个概念的转变&#xff0c;我们要包容这个概念的转变。我想先给大家看两张照片。这是美国纽约的第五大道&#xff0c;左边那张是1900年…

JavaScript每日学习日记(0)

8.10.2019 1.JavaScript能改变HTML内容、属性、样式&#xff0c;能隐藏或显示HTML元素。 2.JavaScript函数可以任意数量被放置在<body>、<head>部分中&#xff0c;但必须位于<script>与</script>标签之间。 3.脚本可放置于后缀为.js的外部文件中&#…

可视化解释11种基本神经网络架构

来源&#xff1a;海豚数据科学实验室标准&#xff0c;循环&#xff0c;卷积和自动编码器网络随着深度学习的飞速发展&#xff0c;已经创建了完整的神经网络体系结构主机&#xff0c;以解决各种各样的任务和问题。尽管有无数的神经网络架构&#xff0c;但对于任何深度学习工程师…

设计模式之二抽象工厂设计模式

继上篇简单工厂设计模式之后&#xff0c;今天继续讲解抽象工厂设计模式。在简单工厂中&#xff0c;我们的工厂类一次只可以处理一类产品。那么如果我们想处理多类产品&#xff0c;简单工厂是满足不了的。必须要用抽象工厂设计模式。 我们先从概念上来了解下什么是抽象工厂设计模…

Nature封面:只低一毫米,时间也会变慢!叶军团队首次在毫米尺度验证广义相对论...

来源&#xff1a;凹非寺作者&#xff1a;晓查 明敏你知道吗&#xff1f;在地球上&#xff0c;楼层越低&#xff0c;时间过得越慢。这可不是玄学&#xff0c;而是爱因斯坦广义相对论预言的时间膨胀效应&#xff1a;引力越大&#xff0c;时间越慢。△ 在不同高度差上验证时钟变快…

SQL 与 ORACLE 的比较

最近参加了一个ORACLE的培训&#xff0c;ORACLE与平日惯用的SQL SERVER果然有很大不同&#xff0c;在网上搜索了一下转了这篇比较SQL与ORACLE的帖子&#xff0c;总体上感觉SQL SERVER使用更加便捷&#xff0c;人性化&#xff0c;在网上的资料支持很丰富ORACLE更加专家一些&…

DARPA可解释AI研究(XAI计划)的4年回顾与经验总结

来源&#xff1a;智源社区作者&#xff1a;David Gunning, Eric Vorm, Jennifer Yunyan Wang, Matt Turek编译&#xff1a;牛梦琳摘要&#xff1a;从项目管理人员和评估人员的角度&#xff0c;对国防高级研究计划局&#xff08;DARPA&#xff09;的可解释人工智能&#xff08;X…

03.Mybatis优化

对动态代理方式的代码进行进一步优化: 1.将conf.xml文件中对数据库的配置信息以db.properties的形式抽离出来 drivercom.mysql.jdbc.Driver urljdbc:mysql://localhost:3306/person?serverTimezoneUTC usernameroot passwordroot <configuration><properties resourc…

​从ASML年报看半导体产业的未来

来源&#xff1a;半导体行业观察在前几天的文章《光刻机巨头ASML的十年变迁》中&#xff0c;笔者梳理了ASML近10年来的财报数据&#xff0c;介绍了其EUV/DUV光刻机出货量、年销售额、研发投入以及各地区的销售情况等。近日&#xff0c;ASML又公布了2021年年报&#xff0c;我们一…

04.MyBatis别名的设置和类型转换器

别名的设置:(别名不区分大小写): 设置单个别名: <configuration><properties resource"db.properties" /><typeAliases><!-- 设置单个别名 --><typeAlias type"com.offcn.entity.Person" alias"person"/><type…

史上首次,强化学习算法控制核聚变登上Nature:DeepMind让人造太阳向前一大步...

来源&#xff1a;机器之心过去三年&#xff0c;DeepMind 和瑞士洛桑联邦理工学院 EPFL 一直在进行一个神秘的项目&#xff1a;用强化学习控制核聚变反应堆内过热的等离子体&#xff0c;如今它已宣告成功。DeepMind研究科学家David Pfau在论文发表后感叹道&#xff1a;「为了分享…