通过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)系统的脆弱性一直被行业人员所诟病,稍微的数据错误就会使系统发生故障。例如在图像识别中,图片微小的像素改变,不会干扰人类视觉…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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;「为了分享…

机器人流程自动化技术的新发展

来源&#xff1a;学习时报作者&#xff1a;李蕾蓬勃发展的数字经济&#xff0c;是全球新一轮科技进步的产物&#xff0c;直接受到新兴数字技术与智能技术的驱动。机器人流程自动化技术&#xff08;简称“RPA”&#xff09;&#xff0c;是近些年获得快速发展与广泛应用的重要智能…

论人工智能历史、现状与未来发展战略

来源&#xff1a;《学术前沿》作者&#xff1a;郭毅可人工智能问世60多年来&#xff0c;承载着人类对自己的智慧的无限自信。在这样的自信下&#xff0c;人工智能发展到了今天&#xff0c;人们在追求机器从事尽可能多的智力劳动的路上走得很快&#xff0c;也很远。今天人工智能…

PHP 开发者大会

PHPCON 2019 开发者大会(上海)2019.8.10-8-11 郭新华,和陈雷给我留下的影响很大 再看下天气,利奇马台风,都坐满了,来的都是真爱. Swoole 的韩天峰开始演讲,感觉是程序员标准的样子,哈哈哈 2345 的高旭 讲公司用swoole 的架构 鸟哥因为台风问题没来成,搞了个直播,哈哈哈,感觉很…

IEEE Fellow杨铮:打破「视觉」垄断,无线信号为 AI 开启「新感官」

来源&#xff1a;AI科技评论作者&#xff1a;陈彩娴编辑&#xff1a;岑峰2020年年初疫情刚开始时&#xff0c;清华大学的官方号曾祭出一篇题为《清华教师升级「十大神器」&#xff0c;上课力满格》的推文&#xff0c;讲述了软件学院某老师如何居家办公、探索出一套防止学生偷懒…

对于量子计算来说,99%的准确度足够吗?

UNIVERSITY OF NEW SOUTH WALES来源&#xff1a;IEEE电气电子工程师来自荷兰代尔夫特理工大学&#xff08;Delft University of Technology&#xff09;、日本理化学研究所&#xff08;Riken&#xff09;和悉尼新南威尔士大学&#xff08;UNSW&#xff09;的研究团队在硅中开发…

人工智能将如何改变芯片设计

来源&#xff1a;ScienceAI编译&#xff1a;绿萝摩尔定律的终结正在逼近。工程师和设计师只能将晶体管小型化并尽可能多地封装到芯片中。因此&#xff0c;他们正在转向其他芯片设计方法&#xff0c;将 AI 等技术融入到设计过程中。例如&#xff0c;三星正在将人工智能添加到其内…

计算机科学家证明,为什么更大的神经网络可以做得更好

来源&#xff1a;ScienceAI编辑&#xff1a;萝卜皮我们的物种很大程度上归功于对生的拇指。但如果进化给了我们额外的拇指&#xff0c;事情可能不会有太大改善。每只手一个拇指就足够了。神经网络并非如此&#xff0c;这是执行类人任务的领先人工智能系统。随着他们变得更大&am…