通过OracleDataReader来读取BLOB类型的数据 (转载)

 通过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);
                }

 

转载自:http://blog.csdn.net/lonet/archive/2010/03/03/5342386.aspx

转载于:https://www.cnblogs.com/wuhenke/archive/2010/10/25/1860752.html

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

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

相关文章

xampp启动Apache端口被占用,修改端口

apache启动端口被占用有可能是80端口被占用,也用可能是443端口被占用。修改这两个端口方法如下: 首先打开xampp,点击下图的config 如果是80端口被占用,选择httpd,conf,会自动打开这个文件,然后在文件里查找80 找到以…

Microsoft SharePoint Server 2010 的新增功能

Microsoft SharePoint Server 2010 包括几个关键的增强和新增功能。重新设计的用户界面中的功能区通过将命令放置到更易于导航的基于任务的选项卡上,来帮助您更快地完成工作。可以跨多个 Internet 浏览器工作,例如 Microsoft Internet Explorer 7.0 和 8…

php四种定界符

1.标准风格 <?php//代码 ?>2.短标记风格 <?//代码 ?>默认情况下是不可以这样写的&#xff0c;我们要到php.ini文件里修改一个配置 找到php.ini文件,我用的是xampp,所以就是以他为例&#xff0c;其他找到php.ini文件方法百度一下就知道了 点击Apache的config&…

php中文乱码问题

访问我的php文件&#xff0c;出现了乱码 解决方法如下&#xff1a; 方法1&#xff1a;加上meta标签&#xff0c;设置字符格式 例如&#xff1a; <?phpecho <meta charset"utf-8">;echo "小河流水人家"; ?>访问就不会乱码了&#xff0c;注…

java 文件转换字符串_java字符串文件互相转换

Java字符串与文件的互转Java中有时候需要读取一个文本类的文件,将其转换为字符串&#xff0c;然后做进一步处理。Java中没有现成的API方法&#xff0c;自己手动实现一个&#xff0c;大家来分享。一、字符串转换为文件/*** 将字符串写入指定文件(当指定的父路径中文件夹不存在时…

php中的echo、print,print_r、var_dump

我们用代码的运行结果来说明 1、echo <?phpheader(content-type:text/html;charsetutf-8);echo "小河流水人家",<br>;echo 10,<br>;echo true,<br>;echo false,<br>;echo array(8),<br>; ?>运行结果 可以输出字符串和数字…

风雨20年:我所积累的20条编程经验 (转)

风雨20年&#xff1a;我所积累的20条编程经验 (转) 编者按&#xff1a;原文作者乔纳森丹尼可&#xff08;Jonathan Danylko&#xff09;是一位自由职业的web架构师和程序员&#xff0c;编程经验已超过20年&#xff0c;涉足领域有电子商务、生物技术、房地产、医疗、保险和公用事…

php的变量、传值、传址、销毁变量

在php中&#xff0c;php的语句需要以**;**结尾&#xff0c;而且变量区分大小写&#xff0c;但关键字不区分大小写 1、变量的命名规则 变量必须以$开头&#xff0c;比如$name&#xff0c;$不是变量名的一部分&#xff0c;仅表示变量名的开始除了$以外&#xff0c;以字母、下划…

php的超全局变量

php的超全局变量如下图 所有的超全局变量都是数组类型&#xff0c;并且php已经帮我们定义好了&#xff0c;下面重点介绍几个 $_GET:用来保存get方式提交的数据 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>测试$_GET…

cmd运行php文件以及环境配置出现的问题、 php.exe不是内部或外部命令,也不是可运行的程序 或批处理文件、PHP startup: Unable to load dynamic library

我用php.exe远行php文件出现了几个问题&#xff0c;先说一下怎么解决这些问题的&#xff0c;然后再说怎么运行 首先是出现 ‘php.exe’ 不是内部或外部命令,也不是可运行的程序 或批处理文件&#xff0c;查了一下&#xff0c;是没有配置php环境变量&#xff0c;配置php环境的过…

php定义常量、判断有没有被定义、预定义常量、显示所有常量

常量一旦被定义&#xff0c;在脚本的其他任何地方都不能被改变&#xff0c;注意&#xff1a;常量名的前面没有$ 语法&#xff1a;define(name,value,case_insensitive ) name:常量名&#xff0c;一般常量名都大写value&#xff1a;常量值case_insensitive &#xff1a;bool类型…

java server模式 设置_JVM client模式和Server模式的区别

这里向大家描述一下JVM client模式和Server模式两者的区别和联系&#xff0c;JVM如果不显式指定是-Server模式还是-client模式&#xff0c;JVM能够根据下列原则进行自动判断(适用于Java5版本或者Java以上版本)。JVM client模式和Server模式JVM Server模式与client模式启动&…

PHP的数据类型、浮点型比较

在介绍php的数据类型前&#xff0c;先说一说强数据类型和弱数据类型。 弱数据类型&#xff1a;变量的类型取决于存放值的类型 强数据类型&#xff1a;变量的类型取决于申明变量时的类型。比如申明变量是A类型就不能存放B类型 PHP是弱数据类型&#xff0c;php支持8种原始数据类型…

《测试驱动开发》读书笔记

最终目标是整洁可用的代码 我们不是从建立对象开始&#xff0c;而是从测试开始 了解需求-》设计测试 -》让测试通过 列出所有已知问题&#xff0c;然后一个一个解决&#xff1b; 培养将软件开发化为一小步一小步开发任务的能力 测试程序与代码所存在的问题不在于重复设计&#…

puppeteer api_使用Node.js和Puppeteer API生成PDF文件

puppeteer apiPuppeteer is a Node library developed by Google and provides a high-level API for developers. Puppeteer是Google开发的Node库&#xff0c;并为开发人员提供了高级API。 With Node.js already up and running, we will install puppeteer via NPM (node pa…

php中进制转换

我们知道&#xff0c;进制有二进制、八进制、十进制、十六进制&#xff0c;但在php中只能存取八进制、十进制、十六进制 在讲进制转换之前&#xff0c;我们先说一下进制单词的缩写&#xff1a; 二进制&#xff1a;bin八进制&#xff1a;oct十进制&#xff1a;dec十六进制&…

python rgb 图像_在Python中查找RGB图像的互补图像

python rgb 图像Complementary image is a transformed image such that it consists of complementary colours of the ones, which is present in the original image. 互补图像是一种变换后的图像 &#xff0c;它由原始图像中存在的互补色组成。 For finding the complemen…

php的字符串、双引号输出变量的问题、转义字符

字符串 php中字符串可以用单引号和双引号表示&#xff0c;但单引号效率比双引号高&#xff0c;因为单引号是真正的字符串&#xff0c;双引号要做运算&#xff0c;即将字符串中的变量替换成值&#xff0c;单引号不需要 看下面的例子 <?phpheader(content-type:text/html;…

jmeter从mysql取值_Jmeter获取数据库值并作为参数请求(转载)

转载自&#xff1a;https://www.cnblogs.com/mawenqiangios/p/11088672.html01Jmeter连接数据库1、添加JDBC Connection Configuration(右键测试计划-->配置元件-->JDBC Connection Configuration)2、配置数据库连接信息&#xff0c;其中DataBase URL&#xff1a;jdbc:my…

ASCII码

ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码&#xff0c;使用7 位二进制数&#xff08;剩下的1位二进制为0&#xff09;来表示所有的大写和小写字母&#xff0c;数字0 到9、标点符号&#xff0c;以及在美式英语中使用…