第八章数据库编程-数据库原理_第1页
第八章数据库编程-数据库原理_第2页
第八章数据库编程-数据库原理_第3页
第八章数据库编程-数据库原理_第4页
第八章数据库编程-数据库原理_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章数据库编程8.1嵌入式SQL8.2存储过程8.3ODBC编程8.1嵌入式SQL建立数据库后就要开发应用系统了。标准化SQL是非过程化的查询语言,具有操作统一、面向集合、功能丰富、使用简单等多项优点。但和程序设计语言相比,高度非过程化的优点同时也成了它的缺点:缺少流程控制能力,难以实现业务中的逻辑控制,SQL编程技术可以有效克服这一缺点,提高应用系统和RDBMS间互操作性。应用系统中使用SQL编程来访问和管理数据库中数据的方式主要有:嵌入式SQL、PL/SQL(存储过程)、ODBC编程、JDBC编程和OLEDB编程等方式。嵌入式SQL是将SQL语句嵌入程序设计语言中,被嵌入的程序设计语言,如C,C++,PB,JAVA,VB等称谓宿主语言,简称主语言。对ESQL,RDBMS一般采用预编译方法处理,即由RDBMS的预处理程序对源程序进行扫描,识别出ESQL语句,把它们转换成语言调用语句,以使主语言编译程序能识别它们,然后由主语言的编译程序将纯的主语言程序编译成目标码。在ESQL中,为了能够区分SQL语句和主语言语句,所有SQL语句都必须加标志。但不同主语言所规定加的标志不同。8.1.1嵌入式SQL的处理过程8.1.2嵌入式SQL与主语言的通信数据库工作单元与源程序工作单元之间的通信主要包括:1、向主语言传递SQL语句执行状态信息,使主语言能够据此信息控制程序流程,主要用SQL通信区SQLCommunicationArea(简称SQLCA)实现;2、主语言向SQL语句提供参数,主要用主变量(HostVariable)实现;3、将SQL语句查询数据库的结果交给主语言处理,主要用主变量和游标(Cursor)实现。一、SQL通信区SQL语句执行后,系统要反馈给主语言若干信息主要包括描述系统当前工作状态的运行环境的各种数据。这些信息将送到SQLCA中。主语言从SQLCA中取出这些状态信息,据些决定接下来的的流程。SQLCA在应用程序中要事先加以定义,一般都是系统级变量。SQLCA中有一个变量SQLCODE用来存放每次执行SQL语句后返回的状态代码。主语言每执行完一条SQL语句之后都不得应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理。二、主变量嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据。SQL语句中使用的主语言程序变量简称为主变量。主变量根据其作用的不同,分为输入主变量和输出主变量。输入主变量由主语言对其赋值,SQL引用;输出主变量由SQL语句对其赋值或设置状态信息,返回给主语言。一个主变量可以附带一个任选的指示变量(IndicatorVariable)。指示变量是一个整型变量,用来“指示”所指主变量的值或条件。指示变量可以指示输入主变量是否为空值,可以检测输出主变量是否是空值,值是否被截断。所有主变量的指示变量必须在SQL语句{}之间进行说明。说明之后,主变量可以在SQL语句中任何一个能够使用表达式的地方出现,为了与数据库对象名区别,SQL语句中的主变量名和指示变量前要加“:”作为标志。三、游标SQL是面向集合的,一条SQL语句可以产生或处理多条记录。而主语言是面向记录的,一组变量一次只能存取一条记录。所以需要用游标来协调这两种不同的处理方式。游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标都有一个名字,用户可以通过游标逐一获取记录,并赋给主变量,交由主语言进一步处理。四、建立和关闭数据库连接嵌入式SQL程序要访问数据库必须先连接数据库。RDBMS根据用户信息对连接请求进行合法性验证,只有通过身份验证,才能建立一个合法连接。1、建立数据库连接2、关闭数据库连接当某个连接上的所有数据库操作完成后,应用程序应该主动释放所占用的连接资源。五、程序实例,以PB为主语言进行讲解8.1.3不用游标的SQL语句有的ESQL语句不需要使用游标,它们是:说明性语句、数据定义语句、数据控制语句、查询结果为单记录的SELECT语句、非CURRENT形式的增删语句。一、查询结果为单记录的SELECT语句例:根据学生学号查询学生信息,假设已经把要查询的学号赋给了主变量givensnoEXECSQLSELECTSNO,SNAME,SSEX,SAGE,SDEPTINTO:HSNO,:HNAME,:HSEX,:HAGE,:HDEPTFROMSTUDENTWHERESNO=:givensno;二、非CURRENT形式的增删改语句有些增删语句不需要使用游标,不是CURRENT形式的,在UPDATE的SET子句和WHERE子句中可以使用主变量,SET子句还可以使用指示变量。EXECSQLUPDATEscSETgrade=:newgradeWHEREsno=:givensno;sageid=-1;EXECSQLUPDATEstudentSETsage=NULLWHEREsdept='CS';EXECSQLDELETEFROMscWHEREsno={SELECTsnoFROMstudentwheresname=:stuname);8.4.1使用游标的SQL语句必须使用游标的SQL的语句有:查询结果为多条记录的SELECT语句、CURRENT形式的UPDATE和DELETE语句。一、查询结果为多条记录的SELECT语句(1)用DELCARE说明游标;(2)用OPEN语句打开游标;(3)用FETCH语句推进游标,一般用一循环结构;(4)使用完后,用CLOSE关闭游标。游标关闭后,就不再和原来的查询结果集相联系。但关闭的游标可以再次打开使用,方法同上。二、CURRENT形式的UPDATE和DELETE语句UPDATE和DELETE语句都是集合操作,如果只想修改或删除其中的某个记录,则需要用带游标的SELECT语句查出所有满足条件的记录,从中进一步找出要修改或删除的记录,然后用CURRENT形式的UPDATE和DELETE语句操作。即要用子句WHERECURRNETOF<游标名>8.1.5动态SQL动态SQL方法允许主语言在运行过程中临时“组装”SQL语句。动态SQL支持动态组装SQL语句和动态参数两种形式,给开发者提供设计任意SQL语句的能力。一、使用SQL语句主变量二、动态参数1.声明SQL语句主变量2.准备SQL语句(PREPARE)3.执行准备好的语句(EXECUTE)8.2存储过程SQL99标准中给出了SQL-invokedroutines的概念,它可以分为存储过程(SQL-invokedprocedure)和函数(SQL-invokedfunction)两类。8.2.1PL/SQL的块结构基本的SQL是高度非过程化的语言。ESQL将SQL语句嵌入程序设计语言,借助高级语言的控制功能实现过程化。PL/SQL程序的基本结构是块。所有的PL/SQL程序都是由块组成的。这些块之间可以互相嵌套,每个块完成一个逻辑操作。定义部分{执行部分{DECLARE变量、常量、游标、异常等/*定义的变量、常量等只能在该基本块中使用,当基本块执行结束时,定义就不再存在。*/BEGINSQL语句、PL/SQL的流程控制语句EXCEPTION异常处理部分/*在出现异常时,采取相应的措施*/END;8.2.2变量和常量的定义1.PL/SQL中定义变量的语法形式是变量名数据类型[[NOTNULL]]:=初值表达式或变量名数据类型[[NOTNULL]初值表达式]2.常量的定义类似于变量的定义常量名数据类型CONSTANT:=常量表达式常量必须要给一个值,并且该值在存在期间或常量的作用哉内不能改变。3.赋值语句变量名称:=表达式8.2.3控制语句PL/SQL提供了流程控制语句,使用时要参考具体的产品手册的语法规则一、条件控制语句1.IF<条件表达式>THEN{语句序列}ENDIF2.IF<条件表达式>THEN{语句序列1}ELSE{语句序列2}ENDIF3.在THEN和ELSE子句中还可以嵌套使用IF语句。二、循环控制语句1、最简单的循环语句LOOPLOOP{循环体,一组PL/SQL语句}ENDLOOP;多数RDBMS的PL/SQL都提供了EXIT、BREAK等循环结束语句,以保证LOOP语句能够在适当的条件下结束。2、WHILE-LOOPWHILE<条件> LOOP{语句序列}ENDLOOP;3、FOR-LOOPFOR计数器IN[步长]下界…上界LOOP{语句序列}ENDLOOP三、错误处理如果PL/SQL在执行时出现异常,则应该让程序在产生异常的语句处停下来,根据异常的类型去执行异常处理。使用时要根据具体DBMS系统来进行处理。8.2.4存储过程存储过程和函数是命名块,它们被编译后保存在数据库中,可以被反复调用,运行速度快。一、存储过程的优点1、由于存储过程不像解释执行的SQL语句那样在提出操作请求时才进行语法分析和优化工作,因而运行效率高,它提供了在服务器端快速执行SQL语句的有效途径。2、存储过程降低了客户机和服务器之间的通信量。客户机上的应用程序只要通过网络向服务器发出存储过程的名字的参数,就可以让RDBMS执行许多条SQL语句,并执行数据处理,只有最终处理结果才返回客户端。3、方便实施企业规则。可以把企业规则的运算程序写成存储过程放入数据库服务器中,由RDBMS管理,既有利于集中控制,又能方便地进行维护。当用户规则发生变化时只要修改存储过程,无须修改其他应用程序。二、存储过程的用户接口1、创建存储过程

CREATEProcedure<过程名>([参数1,参数2,…])AS<{语句序列}>2、执行存储过程

CALL/PERFORMProcedure<过程名>([参数1,参数2,…])3、删除存储过程DROPProcedure<过程名>三、游标和嵌入式SQL一样,在PL/SQL中如果SELECT语句只返回一条记录,可以将该结果存放到变量中。当查询返回多条记录时,就要使用游标对结果集进行处理。一个游标与一个SQL语句相关联。8.3ODBC编程8.3.1数据库互连概述提出和产生ODBC的原因是不同的数据库管理系统的存在。目前广泛使用的RDBMS有多种,尽管这些系统都是关系数据库,也都遵循SQL标准,但不同的系统有许多差异。因此,在某个RDBMS下编写的应用程序就不能在另一个RDBMS下运行,适应性和可移植性较差。更加重要的是,许多应用程序需要共享多个部门的数据资源,访问不同的RDBMS。为此,用户需要有连接不同RDBMS的方法和技术,使数据库系统“开放”,能够“数据库互连”。ODBC是微软公司开放服务体系(WindowsOpenServicesArchitecture,WOSA)中有关数据库的一个组成部分,它建立了一组规范,并提供一组访问数据库的标准API。作为规范它具有两重功效:规范应用开发;规范RDBMS应用接口。8.3.2ODBC工作原理概述ODBC开发应用系统的体系结构,由四部分组成:一、应用程序应用程序提供用户界面、应用逻辑和事务逻辑。使用开发数据库应用程序时,应用程序调用的是标准的ODBC函数和SQL语句。应用层使用ODBCAPI调用接口与数据库进行交互。ODBC应用程序包括的内容有:请求连接数据库;向数据源发送SQL语句;为SQL语句执行结果分配存储空间定义所读取的数据格式;获取数据库操作结果或处理错误;进行数据处理并向用户提交处理结果;请求事务的提交和回滚操作;断开与数据源的连接。二、驱动程序管理器驱动程序管理是用来管理各种驱动程序的。驱动程序管理器是由微软公司提供,它包含在ODBC32.DLL中,对用户是透明的。它管理应用程序和驱动程序之间的通信。驱动程序管理可以建立、配置或删除数据源,并查看系统当前所安装的数据库ODBC驱动程序。三、数据库驱动程序ODBC通过驱动程序来提供应用系统与数据库平台的独立性。ODBC应用程序不能直接存取数据库,其各种操作请求由驱动程序管理器提交给某个RDBMS的ODBC驱动程序,通过调用驱动程序支持的函数来存取数据库。数据库的操作结果也通过驱动程序返回给应用程序。四、ODBC数据源管理数据源是最终用户需要访问的数据,包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。ODBC给每个被访问的数据源指定唯一的数据源名(DataSourceName,DSN)。在连接中,用数据源名来代表用户名、服务器名、所连接的数据库名等。最终用户无需知道DBMS或其他数据库管理软件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论