基于Oracle的影像库开发
2010年第4期·北京测绘·
77
基于Oracle的影像库开发
闻兵工1,文
2
江1,,田
毅1
(1.78155部队,四川成都,610036;2.信息工程大学测绘学院,河南郑州450052)
[摘
要]
介绍了利用OO4O开发影像数据库的关键技术,通过大字段数据的读取代码,以及建立
COO4OWBG类实现了影像数据存贮。文章最后演示了基于Oracle数据库开发的成果,并对开发过程中应该注意的事项进行了总结。
[关键词]OO4O;Oracle;影像库[中图分类号]P237
[文献标识码]B
[文章编号]1007-3000(2010)04-3
4.在CimagedbApp::InitInstance()函数中添加OStartup//打开数据库(),
5.在CimagedbApp::ExitInstance()函数中添加OShut-down()//关闭数据库
6.利用ODatabase的Open(数据库名,用户名,密码)函数在需要的地方连接上数据库,
由于应用程序与数据库通讯经常用到底层类O-Database和ODynaset类,因此这两类可以定义成全局变Ovalue、Oparameter、Osession、Opara-量,其他类Ofield、
mArray和DynasetMark也经常用,可以根据需要定义成共有变量或私有变量,在开发程序时候,还要经常查看这些类提供的函数,这样可以提高效率,以少量的代码实现所需功能。
随着测绘科学技术的发展,遥感影像已经不再单纯依赖于传统的可见光影像,而逐步向多光谱和高光谱等方向发展。特别是随着近年来IKONOS、QuickBird、Spot等高分辨率商业遥感卫星的投入和使用,大大促进了航天全数字化的作业手段也已经摄影测量的发展。另一方面,
逐步取代传统的手工绘图的作业模式,作业效率大大提升。作业效率的提高又使得遥感影像的数据量成几何级数增长。面对海量的遥感影像资料和数据成果,如何对其进行有效的管理和使用便成为其中一个主要的问题。因此,建立高效的影像数据库是非常必要的[1]。
OO4O是Oracle专为客户应用程序使用Oracle数据库服务器而提供的开发库,它可以轻松实现Oracle数据库大二进制BLOB字段和空间数据的读取操作,为用户而这些功能要从提供易于访问Oracle的相关独特功能,
ODBC和基于OLE—DB的组件(如ADO)来实现则非常麻烦甚至是不可访问
[2][4]
2建立COO4OWBG类
建立该类的目的是提供一些共有函数,这些函数可
。由于OO4O自身带有C++类
以方便的利用OO4O实现对数据库的通讯,下面是与数据库通讯的主要函数:
BOOLAdddata(CStringm_iddata1,CStringm_iddata2,floatm_iddata3,…);
//把m_iddata1、m_iddata2、m_iddata3、….这些值添加到一条新的记录;
BOOLModifydata(CStringm_iddata1,CStringm_idda-ta2,floatm_iddata3,…);
//用m_iddata1、m_iddata2、m_iddata3、….替换原来的一条记录;可以为空
BOOLquerydata(CStringm_iddata1,CStringm_idda-ta2,floatm_iddata3,…);
//按m_iddata1、m_iddata2、m_iddata3、….中的一个值或几个值查询记录,可以为空;
BOOLDeldata(intm_idname);//删除第m_idname条记录;
CStringm_iddata1,CStringm_iddata2,floatm_idda-ta3,…是按照数据库字段名称类型和顺序进行设置,调用时候要判断数据类型是否一致,然后再对数据库操
库,利用VC++可以以最少的代码方便快速的实现Oracle数据库的访问,运用Oracle后台数据管理工具和VC面向对象编程语言我们就可以开发用来管理影像和测绘成果的数据库,下面将重点介绍影像数据库的开发过程。
1数据库的连接
基于Oracle利用VC++进行数据库开发,让自己的工程正确连接数据库非常关键,我们可以根据工程的大小,选择要建立单文档还是多文档工程,不推荐用对话框。在VC中新建一个多文档工程imagedb,并把Oracle的的头文件、类库和动态链接库添加到工程中,具体操作如下:
1.在imagedb的Debug文件或系统动态库中添加o-raclm32.dll,
2.在imagedb的projectsettings的link中添加ORA-CLM32.LIB或者在tools/options/Directories/添加含有OR-ACLM32.LIB文件的路径
3.在imagedb的stdafx.h头文件中添加#include"or-acl.h"
[收稿日期][作者简介]
2010-04-26
闻兵工(1979—),男,汉族,四川成都人,助理工程师,从事军事测绘工作。
78
·北京测绘·
2010年第4期
作。在这些函数中,我们即可以用ODynaset提供的函数对数据库进行操作,常用函数有AddNewRecord、SetField-Value、GetFieldValue、StartE
dit、DeleteRecord、MoveFirst、
MoveLast、MovePrev、MoveNext、IsEOF、Update等,也可以用ODatabase的ExecuteSQL()执行SQL命令完成对数据库的操作。如果数据库不包含大数据字段,两种方法都可以,但是如果包含大字段,建议用ExecuteSQL()执行SQL命令完成对数据库的操作,这样可以减少出错的概率。
3大数据字段的读取
大数据字段是指用以存储文档、图形图像、音频、视频等大信息量数据的字段,
Oracle数据库中大数据字段包括:BLOB、CLOB、NCLOB、LONG、LONGRAW、BFILE等,其中LONG和LONGRAW字段可以被BLOB、
CLOB字段代替[3]。OO4O提供了OBlob和OClob两个类访问BLOB、CLOB、NCLOB字段,由于这些大字段可以存储4GB的数据,为了提高效率和避免对内存的过度占用,0040对LOB(包括BLOB、
CLOB、NCLOB)字段的读写都采取了设定一个合适的读写缓冲区,然后分次读写大字段数据。首次写LOB字段时,必须先往该字段中插入一个空值,然后编辑该字段,插入实际的大数据。
由于本程序设置的大字段为BLOB,下面提供读取BLOB的函数ReadBlob、WriteBlob。部分提示错误信息代码省略,其中ODynasetm_Dynaset;
BOOLReadBlob(CStringfild)
//该函数是从blob中读取数据,fild是字段名,读取得到数据保留在imagebuffer中,数据的大小Size。
{OBloboblob;
//判断数据空中的blob是不是为空m_Dynaset.GetFieldValue(fild,&oblob);if(oblob.GetSize()==0)
{MessageBox("数据库中没有存储需要的信息");returnFALSE;}try{//获得blob的大小Size=oblob.GetSize();//开辟内存空间
imagebuffer=newBYTE[Size+1];memset(imagebuffer,0,Size);
//读取blob字段oblob.EnableStreaming(Size);shortstatus=OLOB_NEED_DATA;DWORDamtread=0;
while(status==OLOB_NEED_DATA)
{amtread=oblob.Read(&status,(unsignedchar*)im-agebuffer,(unsignedlong)Size);//读取数据}
oblob.DisableStreaming();oblob.Close();returnTRUE;}catch(OExceptionE)
{//添加出现异常时候的错误}}
BOOLWriteBlob(CStringfild,BYTE*bMem,longlMem)
//该函数是向blob中写入数据,fild是字段名,bmem是要存储数据的内存,lmen是数据的大小。
{oresultores;//查看操作结果OBloboblob;
ores=m_Dynaset.StartEdit();ores=m_Dynaset.GetFieldValue(fild,&oblob);
OValue
oval;
try{if(oblob.IsNull())//插入空值{TRACE("OBlobisNull.........");ores=oval.SetEmpty();
ores=m_Dynaset.SetFieldValue(fild,oval);ores=m_Dynaset.Update();ores=m_Dynaset.StartEdit();
ores=m_Dynaset.GetFieldValue(fild,&oblob);if(o …… 此处隐藏:5217字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [行业资料]创设有效语境 改善英语教学
- [行业资料]微商推广引流的44种方法
- [行业资料]医疗机构输血科血库基本标准
- [行业资料]锂离子电池项目可行性研究报告(2015年
- [行业资料]申请执行人长沙市开福区人口和计划生育
- [行业资料]倾听草木的呼吸(初中阅读)
- [行业资料]长沙新环境厂房租赁合同书
- [行业资料]2022年经济师《金融专业知识与实务(中
- [行业资料]浦东新区2009学年度第二学期期末考试七
- [行业资料]企业劳动用工协议书
- [行业资料]最新苏科版七年级数学上册第二章有理数
- [行业资料]12星座与英语词汇学习
- [行业资料]2008年高考化学科经验
- [行业资料]镇政府2015年工作总结及2016年政府工作
- [行业资料]梧州市产业园区规划及招商引资报告
- [行业资料]大体积砼承台施工作业指导书
- [行业资料]学生干部在创建和谐校园中的作1
- [行业资料]小学语文教师实习个人总结
- [行业资料]2014完美最新奖金制度
- [行业资料]2016年一建建筑实务-重要知识点地质
- 【最新】人教版小学语文三年级上册:第
- 中国中小企业年鉴(地区数据)
- 动物与人类生活的关系 ppt
- 选修3 专题3 胚胎工程知识点
- 遥感技术基础复习题
- 公司员工职业生涯规划实施方案
- 辽宁省建筑施工企业安全生产许可证管理
- 15秋福师《中外幼儿教育史》在线作业二
- 2015-2020年中国网络视频行业深度调研
- 数学八年级下华东师大版21.1算术平均数
- 苏教版一年级语文下册《小松树和大松树
- 油画论文:摄影对当下油画艺术的影响
- 西方自由主义影响下的新闻自由——从17
- 基于支持向量机的商业银行信用风险评估
- 机械设计基础复习题答案(修改)(1)
- 语文:高考作文素材:材料引用及论点论
- 月份工程进度款结算单62+56
- 2018-2023年中国互联网基金行业现状研
- 人教版 PEP 五年级下册Unit1Lesson1 th
- 2014学年第二学期四年级数学期末教学质




