APP下载

基于OCI对于空间数据库的访问
——基于编程实践

2010-10-09林雪云

赤峰学院学报·自然科学版 2010年2期
关键词:句柄空间数据数据结构

林雪云

(福建师范大学 福清学院,福建 福清 350300)

基于OCI对于空间数据库的访问
——基于编程实践

林雪云

(福建师范大学 福清学院,福建 福清 350300)

本文是作者在开发系统编程实践的基础上,介绍基于OCI对于空间数据库的访问,提供给从事软件开发的工作人员用以学习与参考.

ODBC;Oracle API;OCI

1 引言

ORACLE是一种适用于大型、中型和微型计算机的关系数据库管理系统,它使用SQL(Structured guery language)作为它的数据库语言.

访问Oracle数据库有三种方法:通过ODBC数据源、基于Oracle API或OCI.

这些方法中,ODBC虽然通用但效率和灵活性较差,关于Oracle API编程的资料很少,而基于OCI进行复杂的空间数据访问,可以提高数据访问的效率和灵活性.

OCI调用接口(oracle Call Interface,简称OCI)提供了一组接口子函数,支持所有的SQL数据定义、数据操纵、查询和事务控制等.使用ocl开发方法实质上是结构查询语言和第三代程序设计语言结合的一种开发方法.根据目前掌握的资料,基于Ocl的对非空间数据的访问已有成熟的函数库可以借鉴和使用,但对于空间数据库,可以参考的资料很少.本文将基于编程实践上,介绍基于OCI对于空间数据库的访问.

2 OCI的数据结构和编程结构

Handies和descriPtors是在OCI应用中定义的透明数据结构并被直接分配,Handle是指向OCI分配的一块存储区的透明指针,大多数OCI应用都需要访问存储在handles中的信息,0CIAttrGet()和OCIAttrsetO访问这些信息.OCI descriPtors和locators是保存特定数据信息的透明数据结构.

2.1 OCI的编程结构

OCI的编程结构为:

(l)启动OCI程序运行环境和线程(即初始化并连接);

(2)分配必要的句柄,建立数据库连接和用户会话;

(3)向服务器发出SQL请求并进行必要的数据处理;

(4)释放不再使用的请求和句柄,准备新的请求(包含错误处理);

(5)终止用户会话并断开服务器连接.

2.2 OCI程序的处理步骤

OCI程序的处理步骤见图1.

3 OCI程序流程

OCI程序主要是通过分配调用相应功能的句柄,控制SQL语句的执行来实现的.

程序的OCI流程如图2,图3是处理SQL语句的具体过程.

图2为程序的底层流程,其相应功能均以程序模块中的相应函数实现,因为不同的空间数据访问需要不同的SQL查询语句以及相应的处理,SpatialRelation类和Ispatialoperator类中的成员函数就是针对不同空间关系查询和空间操作,构造不同的SQL查询,结合Oracle Spatial,实现相应的功能.

4 基于OCI的空间数据库访问

基于OCI的空间数据库访问主要是将OCI与Oracle Spatial结合起来,引入面向对象的思想,完成对空间数据的操作,下面根据课题的编程实践总结一些访问空间数据库的经验.

数据结构:在oracle spatial的对象一关系模型中,空间数据是被作为几何对象来处理的,因此在我们的程序中也引入面向对象的思想,把对空间数据的操作转化成对对象属性的操作.这就需要根据oracle spatial中空间对象的存储模式,在程序中建立起相应的数据结构.这样既简化了编程也简化了对空间数据的处理.IGeometry类即为程序中的空间数据结构.

SQL语句的生成和分析:

SQL语句的生成有两种方法:一是转化成对字符串的操作,生成需要执行的SQL语句后,再传递给OCI中处理SQL语句的句柄;二是首先确定需要用户输入哪些变量,将用户输入变量用spdntf函数“绑定”到SQL语句当中,生成SQL语句.

第二种方法程序示例如下(构造判断两空间对象是否相等的SQL查询):

无论用哪种方式生成SQL语句,都要调用.parse函数进行解析,必要时还要进行SQL语句的预执行确定有哪些输出变量和输出变量的种类,Oraclespatial中的函数嵌入:

在对空间关系进行判定和执行空间操作的过程中,嵌入使用Oracle Spatial中的相关函数,可以极大地简化编程工作,示例可参见SQL语句的生成和分析.

可以把Oracle Spatial中的相关函数嵌入到SQL语句中,而后预执行以确定函数执行结果的输出类型.

查询结果的分析:

虽然在控制SQL语句的执行过穆中已经可以确定输出结果的类型,但因为有些是OCI程序中特定的数据类型,因此还需要与编程语言中的数据类型建立对应关系,进一步确定输出结果的含义.这里主要涉及到数据类型的转换、字符串的比较和空间数据坐标值的转换.

三种提高效率的方法:

在编程过程中,发现了以下三种提高数据访问效率的方法,当数据量较大时,这些方法可以极大地提高效率.下面对这三种方法进行简单介绍:

(1)SQL语句的延迟执行.为了提高性能,OCI与Oracle7版本以上的数据库管理系统在处理SQL语句时允许一步或多步的延迟执行.例如,分析SQL语句、结合输入变量以及定义输出变量这些步骤能延迟到该语句被执行时才处理.

实现延迟执行的方法有两种:采用延迟方式连接或在oParse调用中使用设置为0的deffig参数.

(2)将空间对象“绑定”到内存,使用完毕后释放内存空间.

(3)建立空间索引.在众朗le数据库中进行空间关系的查询时必须先建立索引,进行大数据量的空间查询时建立空间索引可以提高查询的速度和效率.Oracle提供两套索引机制:R tree和Quadtree,可以根据需要进行选择.本人在开发系统时,选择的是缺省Rtree索引.

5 小结

在使用oracle数据库开发系统过程中,对“基于OCI对于空间数据库的访问”的一些看法与观点只是其中体会之一,还有如dll技术中导入与导出函数如何匹配等等,还需要进一步总结归纳.这里不再提出.

〔1〕凌志祥.Linux下Oracle应用技术及实现 [J].电子技术, 2008(10).

〔2〕肖军.ORACLE数据库性能调整与优化[D].武汉大学, 2004.

〔3〕王敦,白学仲.ORACLE的OCI调用接口[J].铁路计算机应用,1997(04).

〔4〕王二暖.Oracle DML触发器在监视重要表中的作用[J].昭通师范高等专科学校学报,2005(05).

TP311.133.1

A

1673-260X(2010)02-0031-02

猜你喜欢

句柄空间数据数据结构
数据结构线上线下混合教学模式探讨
高校图书馆持久标识符应用研究
编译程序语法分析句柄问题分析与探讨
“翻转课堂”教学模式的探讨——以《数据结构》课程教学为例
高职高专数据结构教学改革探讨
元数据驱动的多中心空间数据同步方法研究
CDIO模式在民办院校数据结构课程实践教学中的应用
基于文件系统的分布式海量空间数据高效存储与组织研究
客户端空间数据缓存策略
多源空间数据同名实体几何匹配方法研究