1.库函数级别访间接口
库函数级别的数据访问接口往往是数据库提供的最底层的高级程序语言访问数据接口,如 Oracle数据库的0racle Call Interface(OCI)。开发者可以使用高级程序语言编写程序实现人机交五互和业务逻辑,而使用OCI来访问数据库。
OCI是由一组应用程序开发接口(API)组成的,Oracle提供API的方式是提供一组库。这组库包含一系列的函数调用。这组函数包含了连接数据库、调用SQL和事务控制等。在安装DBMS Server或者客户端的时候,就安装了OCI。
OCI开发方法实际上是将结构化查询语言(SQL)和高级程序语言相结合的一种方法。对数据库的访问是通过调用OCI库函数实现的,若将C语言作为宿主语言,那么0racle数据库调用其实就是C程序中的函数调用,一个含OCI调用的C程序其实就是用C语言编写的应用程序。这样的程序既具有SQL语言非过程性的优点又具有C语言过程性的优点,同时还可具有SQL语言的扩展,PL/SQL语言过程性和结构性的优点,因此使得开发出的应用程序具有高度灵活性。
OCI开发方法的缺点是往往强依赖于特定的数据库,需要数据库开发人员对该数据库机制有较深的理解,学习难度较大,开发效率不是很高。
2.嵌入S QL访问接口
嵌入式SQL(Embedded SQL)是一种将S QL语句直接写入某些高级程序语言,如CCOBOL、Java、Ada等编程语言的源代码中的方法。借此方法,可使得应用程序拥有了访问数据以及处理数据的能力。
在SQL86规范中定义了对于COBOL、FORTRAN、PI/L等语言的嵌入式SQL的规范。在
SQL89规范中,定义了对于C语言的嵌入式SQL的规范。一些大型的数据库厂商发布的数据库产品中,都提供了对于嵌入式SQL的支持,如0racle、DB2等。在这一方法中,将SQL文嵌入的目标源码的语言称为宿主语言。提供对于嵌入式SQL的支持,需要数据库厂商除了提供DBMS之外,还必须提供一些工具。为了实现对于嵌入式SQL的支持,技术上必须解决以下问题。
(1)宿主语言的编译器不能识别和接受SQL程序,需要解决如何将SQL的宿主语言源代码编译成可执行码。
(2)宿主语言的应用程序如何与DBMS之间传递数据和消息。
(3)如何把对数据的查询结果逐次赋值给宿主语言程序中的变量,以供其处理。
(4)数据库的数据类型与宿主语言的数据类型有时不完全对应或等价,如何解决必要的数据类型转换问题。
为了解决上述这些问题,数据库厂商需要提供一个嵌入式SQL的预编译器,把包含有嵌入式SQL的宿主语言源码转换成纯宿主语言的代码。这样一来,源码即可使用宿主语言对应的编译器进行编译。通常情况下,经过嵌入式SQL的预编译之后,原有的嵌入式SQL会被转换成一系列函数调用。因此,数据库厂商还需要提供一系列函数库,以确保链接器能够把代码中的函数调用与对应的实现链接起来。
嵌入式SQL中除了可以执行标准SQL程序之外,为了对应嵌入的需要,还增加了一些额外的语法成分。主要包括宿主变量使用声明、数据库访问、事务控制、游标操作的语法等。
领取专属 10元无门槛券
私享最新 技术干货