编程 Flashcards

0
Q

应用系统中使用SQL编程来访问和管理数据库中数据的方式主要有

A

嵌入式SQL(ESQL)、PL/SQL、ODBC编程、JDBC编程和OLEDB编程等方式。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
1
Q

标准SQL

A

是非过程化的查询语言,具有操作统一、面向集合、功能丰富、使用简单等多项优点。但和程序设计语言相比,高度非过程化的优点同时也造成了它的一个弱点:缺少流程控制的能力,难以实现应用业务中的逻辑控制。
SQL编程技术可以有效克服SQL语言实现复杂应用方面的不足,提高应用系统和RDBMS间的互操作性。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

SQL的特点之一

A

在交互式和嵌入式两种不同的使用方式下,SQL的语法结构基本是一致的。

在程序设计的环境下,SQL语句要做某些必要的扩充。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

嵌入式SQL

A

将SQL语句嵌入程序设计语言中。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

宿主语言(简称主语言)

A

被嵌入的程序设计语言,如C、C++、Java。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

预编译

A

对ESQL,RDBMS一般采用预编译方法处理,即由RDBMS的预处理程序对源程序进行扫描,识别出ESQL语句,把它们转换成主语言调用语句,以使主语言编译程序能识别它们,然后由主语言的编译程序将纯的主语言程序编译成目标码。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

区分SQL语句与主语言语句

A

在ESQL中,为了能够区分SQL语句与主语言语句,所有SQL语句都必须加前缀EXEC SQL,以(;)结束成为一个程序片段:
EXEC SQL ;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

将SQL嵌入到高级语言中混合编程

A

SQL语句负责操纵数据库,存取数据库中的数据。高级语言语句(主语言语句)负责控制程序流程以及对取出的数据做进一步加工处理。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

数据库工作单元与源程序工作单元之间的通信

A

1。向主语言传递SQL语句的执行状态信息,使主语言能够据此信息控制程序流程,主要用SQL通信区(SQLCA)实现。
2。主语言向SQL语句提供参数,主要用主变量实现。
3。将SQL语句查询数据库的结果交主语言处理,主要用主变量和游标实现。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

SQL通信区

A

SQL语句执行后,系统要反馈给应用程序若干信息,主要包括描述系统当前工作状态和运行环境的各种数据。这些信息将送到SQLCA中。应用程序从SQLCA中取出这些状态信息,据此决定接下来执行的语句。
SQLCA在应用程序中用EXEC SQL INCLUDE SQLCA加以定义。SQLCA中有一个变量SQLCODE,用来存放每次执行SQL语句后返回的代码。
应用程序每执行完一条SQL语句之后都应该测试一下SQLCODE的值,以了解该SQL语句执行情况并做相应处理。如果SQLCODE等于预定义的常量SUCCEED,则表示SQL语句成功,否则在SQLCODE存放错误代码。程序员可以根据错误代码查找问题。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

主变量

A

嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据。
一个主变量可以附带一个任选的指示变量。
所有主变量和指示变量必须在SQL语句BEGIN DECLARE SECTION与END DECLARE SECTION之间进行说明。说明之后,主变量可以在SQL语句中任何一个能够使用表达式的地方出现,为了与数据库对象名(表名、视图名、列名等)区别,SQL语句中的主变量名和指示变量前要加冒号(:)作为标志。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

主变量的定义

A

SQL语句中可以使用主语言的程序变量简称为主变量。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

主变量根据其作用的不同,分为

A

输入主变量和输出主变量。

输入主变量由应用程序对其赋值,SQL语句引用;输出主变量由SQL语句对其赋值或设置状态信息,返回给应用程序。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

指示变量

A

是一个整型变量,用来"指示"所指主变量的值或条件。

指示变量可以指示输入主变量是否为空值,可以检测输出主变量是否为空值,值是否被截断。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

游标

A

SQL是面向集合的,一条SQL语句可以产生或处理多条记录。而主语言是面向记录的,一组主变量一次只能存放一条记录。所以仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求,为此嵌入式SQL引入了游标的概念,用游标来协调这两种不同的处理方式。
游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录,并赋值给主变量,交由主语言进一步处理。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

建立和关闭数据库连接

A

嵌入式SQL程序要访问数据库必须先连接数据库。RDBMS根据用户信息对连接请求进行合法性验证,只有通过了身份验证,才能建立一个可用的合法连接。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

建立连接的ESQL语句

A

EXEC SQL CONNECT TO target [AS connection-name] [USER user-name];
target是要连接的数据库服务器,它可以是一个常见的服务器标识串,如@:。或者是包含服务器标识的SQL串常量,也可以是DEFAULT。
connection-name是可选的连接名,连接必须是一个有效的标识符,主要用来识别一个程序内同时建立的多个连接,如果在整个程序内只有一个连接也可以不指定连接名。
如果程序运行过程中建立了多个连接,执行的所有数据库单元的工作都在该操作提交时所选择的当前连接上。程序运行过程中可以修改当前连接,对应的嵌入式SQL语句为
EXEC SQL CONNECTION connection-name|DEFAULT;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

关闭数据库连接

A

当某个连接上的所有数据库操作完成后,应用程序应该主动释放所占用的连接资源。关闭数据库连接的ESQL语句是
EXEC SQL DISCONNECT [connection-name];
其中connection-name是EXEC SQL CONNECT所建立的数据库连接。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

不用游标的SQL语句

A

有的ESQL SQL语句不需要使用游标。它们是:说明性语句、数据定义语句、数据控制语句、查询结果为单记录的SELECT语句、非CURRENT形式的增删改语句。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

查询结果为单记录的SELECT语句

A

因为查询结果只有一个,只需要用INTO子句指定存放查询结果的主变量。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

使用单记录的SELECT语句需要注意

A

1。INTO子句、WHERE子句和HAVING短语的条件表达式中均可以使用主变量。
2。查询结果为空值的处理。
查询返回的记录中,可能某些列为空值NULL。为了表示空值,在INTO子句的主变量后面跟有指示变量,当查询得出的某个数据项为空值时,系统会自动将相应主变量后面的指示变量置为负值,而不再向该主变量赋值。所以当指示变量为负值时,不管主变量为何值,均认为主变量值为NULL。
指示变量只能用于INTO子句中。
3。如果查询结果实际上并不是单条记录,而是多条记录,则程序出错,RDBMS会在SQLCA中返回错误信息。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

非CURRENT形式的增删改语句

A

有些增删改语句不需要使用游标,不是CURRENT形式的。在UPDATE的SET子句和WHERE子句中可以使用主变量,SET子句还可以使用指示变量。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

必须使用游标的SQL语句

A

查询结果为多条记录的SELECT语句、CURRENT形式的UPDATE和DELETE语句。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

查询结果为多条记录的SELECT语句

A

一般情况下,SELECT语句查询结果是多条记录,因此需要用游标机制,将多条记录一次一条送主程序处理,从而把对集合的操作转换为对单个记录的处理。
使用游标的步骤为:
1。说明游标。用DECLARE语句为一条SELECT语句定义游标:
EXEC SQL DECLARE CURSOR FOR ;
定义游标仅仅是一条说明性语句,这时RDBMS并不执行SELECT语句。
2。打开游标。用OPEN语句将定义的游标打开。
EXEC SQL OPEN ;
打开游标实际上是执行相应的SELECT语句,把查询结果取到缓冲区中。这时游标处于活动状态,指针指向查询结果集中的第一条记录。
3。推进游标指针并取当前记录。
EXEC SQL FETCH INTO [] [, []]…;
其中主变量必须与SELECT语句中的目标列表达式具有一一对应关系。
用FETCH语句把游标指针向前推进一条记录,同时将缓冲区中的当前记录取出来送至主变量供主语言进一步处理。通过循环执行FETCH语句逐条取出结果集中的行进行处理。
4。关闭游标。用CLOSE语句关闭游标,释放结果集占用的缓冲区及其他资源。
EXEC SQL CLOSE ;
游标被关闭后,就不再和原来的查询结果集相联系。但被关闭的游标可以再次被打开,与新的结果集相联系。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

CURRENT形式的UPDATE和DELETE语句

A

UPDATE语句和DELETE语句都是集合操作,如果只想修改或删除其中某个记录,则需要用带游标的SELECT语句查出所有满足条件的记录,从中进一步找出要修改或删除的记录,然后用CURRENT形式的UPDATE语句和DELETE语句修改或删除之。即UPDATE语句和DELETE语句中要用子句WHERE CUURENT OF 来表示修改或删除的是最近一次取出的记录,即游标指针指向的记录。
当游标定义中的SELECT语句带有UNION或ORDER BY子句时,或者该SELECT语句相当于定义了一个不可更新的视图时,不能用CURRENT形式的UPDATE语句和DELETE语句。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

静态SQL语句

A

前面所讲的嵌入式SQL语句中使用的主变量、查询目标列、条件等都是固定的,属于静态SQL语句。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

动态SQL

A

静态嵌入式SQL语句能够满足一般要求,但某些应用可能要到执行时才能够确定要提交的SQL语句,查询的条件。就要使用动态SQL来解决这类问题。
动态SQL方法允许在程序运行过程中临时"组装"SQL语句。动态SQL支持动态组装SQL语句和动态参数两种形式,给开发者提供设计任意SQL语句的能力。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

使用SQL语句主变量

A

程序主变量包含的内容是SQL语句的内容,而不是原来保存数据的输入或输出变量,这样的变量成为SQL语句主变量。SQL语句主变量在程序执行期间可以设定不同的SQL语句,然后立即执行。
(const char *stmt=”CREATE TABLE test(a int);”;
EXEC SQL EXECUTE IMMEDIATE :stmt;)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

动态参数

A

是SQL语句中的可变元素,使用参数符号(?)表示该位置的数据在运行时设定。和前面使用的主变量不同:动态参数的输入不是编译时完成绑定,而是通过(prepare)语句准备主变量和执行(execute)时绑定数据或主变量来完成。使用动态参数的步骤:
1。声明SQL语句主变量。
变量的SQL内容包含动态参数(?)。
2。准备SQL语句(PREPARE)。
PREPARE将分析含主变量的SQL语句内容,建立语句中包含的动态参数的内部描述符,并用标识它们的整体。
EXEC SQL PREPARE FROM ;
3。执行准备好的SQL语句(EXECUTE)。
EXECUTE将SQL语句中分析出的动态参数或数据常量绑定作为语句的输入或输出变量。
EXEC SQL EXECUTE [INTO ] [USING ];

30
Q

SQL-invoked routines(调用例程)

A

SQL99标准中给出了SQL-invoked routines的概念。SQL-invoked routines可以分为存储过程和函数两类。

31
Q

PL/SQL

A

建立存储过程可以指定所使用的程序设计语言。PL/SQL是编写数据库存储过程的一种过程语言。它结合了SQL的数据操作能力和过程化语言的流程控制能力,是SQL的过程化扩展。
基本的SQL是高度非过程化的语言。ESQL将SQL语句嵌入程序设计语言,借助高级语言的控制功能实现过程化。PL/SQL是对SQL的扩展,使其增加了过程化语句功能。

32
Q

PL/SQL程序的基本结构

A

是块。所有的PL/SQL程序都是由块组成的。这些块之间可以互相嵌套,每个块完成一个逻辑操作。
定义的变量、常量等只能在该基本块中使用。当基本块执行结束时,定义就不再存在。
遇到不能继续执行的情况称为异常。在出现异常时,采取措施来纠正错误或报告错误。

33
Q

PL/SQL中定义变量的语法形式

A

变量名 数据类型 [[NOT NULL]:=初值表达式]

变量名 数据类型 [[NOT NULL] 初值表达式]

34
Q

常量的定义类似于变量的定义

A

变量名 数据类型 CONSTANT := 常量表达式

常量必须要给一个值,并且该值在存在期间或常量的作用域内不能改变。如果试图修改它,PL/SQL将返回一个异常。

35
Q

赋值语句

A

变量名称:=表达式

36
Q

控制结构

A

PL/SQL提供了流程控制语句,主要有条件控制语句和循环控制语句。这些语句的语法、语义和一般的高级语言(如C语言)类似。

37
Q

条件控制语句

A
一般有三种形式的语句:IF-THEN,IF-THEN-ELSE和嵌套的IF语句。
1。IF condition THEN
Sequence_of_statements;
END IF;
2。IF condition THEN
Sequence_of_statements1;
ELSE
Sequence_of_statements2;
END IF;
3。在THEN和ELSE子句中还可以再包括IF语句,即IF语句可以嵌套。
38
Q

循环控制语句

A
PL/SQL有三种循环结构:LOOP,WHILE-LOOP和FOR-LOOP。
1。最简单的循环语句LOOP
LOOP
Sequence_of_statements;
END LOOP;
2。WHILE-LOOP
WHILE condition LOOP
Sequence_of_statements;
END LOOP;
每次执行循环体语句之前,首先对条件进行求值。如果条件为真,则执行循环体内的语句序列。如果条件为假,则跳过循环并把控制传递给下一个语句。
3。FOR-LOOP
FOR count IN [REVERSE] bound1 ... bound2 LOOP
Sequence_of_statements;
END LOOP;
FOR循环的基本执行过程是:将count设置为循环的下界bound1,检查它是否小于上界bound2。当指定REVERSE时则将count设置为循环的上界bound2,检查count是否大于下界bound1。如果越界则执行跳出循环,否则执行循环体,然后按照步长(+1或-1)更新count的值,重新判断条件。
39
Q

错误处理

A

如果PL/SQL在执行时出现异常,则应该让程序在产生异常的语句处停下来,根据异常的类型去执行异常处理语句。

SQL标准对数据库服务器提供什么样的异常处理做出了建议,要求PL/SQL管理器提供完善的异常处理机制。相对于ESQL简单的执行状态信息SQLCODE,这里的异常处理就复杂多了。

40
Q

PL/SQL块主要有两种类型

A

命名块和匿名块。

41
Q

匿名块

A

每次执行时都要进行编译,它不能被存储到数据库中,也不能在其他的PL/SQL块中调用。

42
Q

命名块

A

存储过程和函数是命名块,它们被编译后保存在数据库中,可以反复被调用,运行速度较快。

43
Q

存储过程

A

是由PL/SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,因此称它为存储过程,使用时只要调用即可。

44
Q

存储过程的优点

A

1。由于存储过程不像解释执行的SQL语句那样在提出操作请求时才进行语法分析和优化工作,因而运行效率高,它提供了在服务器端快速执行SQL语句的有效途径。
2。存储过程降低了客户机和服务器之间的通信量。客户机上的应用程序只要通过网络向服务器发出存储过程的名字和参数,就可以让RDBMS执行许多条的SQL语句,并执行数据处理。只有最终处理结果才返回客户端。
3。方便实施企业规则。可以把企业规则的运算程序写成存储过程放入数据库服务器中,由RDBMS管理,既有利于集中控制,又能够方便地进行维护。当用户规则发生变化时只要修改存储过程,无须修改其他应用程序。

45
Q

创建存储过程

A

CREATE Procedure 过程名([参数1,参数2,…]) /存储过程首部/
AS
; /存储过程体,描述该存储过程的操作/
存储过程包括过程首部和过程体。
过程名:是数据库服务器合法的对象标识。
参数列表:用名字来标识调用时给出的参数值,必须指定值的数据类型。存储过程的参数也可以定义输入参数、输出参数或输入/输出参数。默认为输入参数。
过程体:是一个。包括声明部分和可执行语句部分。

46
Q

重命名存储过程

A

ALTER Procedure 过程名1 RENAME TO 过程名2;

47
Q

执行存储过程

A

CALL/PERFORM Procedure 过程名([参数1,参数2,…]);

使用CALL或者PERFORM等方式激活存储过程的执行。在PL/SQL中,数据库服务器支持在过程体中调用其他存储过程。

48
Q

存储过程

A

DROP PROCEDURE 过程名( );

49
Q

游标

A

和嵌入式SQL一样,在PL/SQL中如果SELECT语句只返回一条记录,可以将该结果存放到变量中。当查询返回多条记录时,就要使用游标对结果集进行处理。一个游标与一个SQL语句相关联。
PL/SQL存储过程中的语句格式稍有差别,另外PL/SQL中的游标由PL/SQL引擎管理,可以具有更多内置扩展特性。

50
Q

推出和产生ODBC的原因

A

不同的数据库管理系统的存在。
目前广泛使用的RDBMS有多种,尽管这些系统都属于关系数据库,也都遵循SQL标准,但是不同的系统有许多差异。因此,在某个RDBMS下编写的应用程序就不能在另一个RDBMS下运行,适应性和可移植性较差。
许多应用程序需要共享多个部门的数据资源,访问不同的RDBMS。
为此,人们开始研究和开发连接不同RDBMS的方法、技术和软件,使数据库系统"开放",能够"数据库互联"。其中ODBC就是为了解决这样的问题而由微软公司推出的产品。

51
Q

ODBC提出的目的

A

为了提高应用系统与数据库平台的独立性。
使用ODBC使得应用系统的移植变得相当容易。当一个应用系统从一个数据库平台移植到另一个数据库平台时只要改换ODBC中RDBMS驱动程序就行了。
使用ODBC可以使得应用系统的开发与数据库平台的选择、数据库设计等工作并行进行。可以在现有的数据库平台上开发应用系统,然后方便的移植到选择的数据库平台上,从而大大缩短整个系统的开发时间。

53
Q

ODBC

A

ODBC是微软公司开放服务体系(WOSA)中有关数据库的一个组成部分,它建立了一组规范,并提供一组访问数据库的标准API。作为规范它具有两重功效或约束力:一方面规范应用开发,另一方面规范RDBMS应用接口。

54
Q

使用ODBC开发应用系统的体系结构

A

用户应用程序、驱动程序管理器(ODBC Driver Manager)、数据库驱动程序(ODBC Driver)、数据源(如RDBMS和数据库)。

55
Q

应用程序

A
应用程序提供用户界面、应用逻辑和事务逻辑。使用ODBC开发数据库应用程序时,应用程序调用的是标准的ODBC函数和SQL语句。应用层使用ODBC API调用接口与数据库进行交互。使用ODBC来开发应用系统的程序简称为ODBC应用程序,包括的内容有:
请求连接数据库;
向数据源发送SQL语句;
为SQL语句执行结果分配存储空间,定义所读取的数据格式;
获取数据库操作结果,或处理错误;
进行数据处理并向用户提交处理结果;
请求事务的提交和回滚操作;
断开与数据源的连接。
56
Q

驱动程序管理器

A

用来管理各种驱动程序。
由微软公司提供,包含在ODBC32.DLL中,对用户是透明的。它管理应用程序和驱动程序之间的通信。驱动程序管理器的主要功能包括装载ODBC驱动程序、选择和连接正确的驱动程序、管理数据源、检查ODBC调用参数的合法性及记录ODBC函数的调用等,当应用层需要时返回驱动程序的有关信息。
ODBC驱动程序管理器可以建立、配置或删除数据源,并查看系统当前所安装的数据库ODBC驱动程序。

57
Q

数据库驱动程序

A

ODBC通过驱动程序来提供应用系统与数据库平台的独立性。
ODBC应用程序不能直接存取数据库,其各种操作请求由驱动程序管理器提交给某个RDBMS的ODBC驱动程序,通过调用驱动程序所支持的函数来存取数据库。数据库的操作结果也通过驱动程序返回给应用程序。如果应用程序要操纵不同的数据库,就要动态地链接到不同的驱动程序上。

58
Q

目前的驱动程序

A

主要有单束和多束两类。单束一般是数据源和应用程序在同一台机器上,驱动程序直接完成对数据文件的I/O操作,这时驱动程序相当于数据管理器。多束驱动程序支持客户机/服务器、客户机/应用服务器/数据库服务器等网络环境下的数据访问,这时由驱动程序完成数据库访问请求的提交和结果集接收,应用程序使用驱动程序提供的结果集管理接口操纵执行后的结果数据。

60
Q

各个数据库厂商的ODBC应用程序接口(ODBC API)都要符合两方面的一致性

A

1。API一致性,API一致性级别有核心级、扩展1级、扩展2级。

2。语法一致性,语法一致性级别有最低限度SQL语法级、核心SQL语法级、扩展SQL语法级。

61
Q

函数概述

A

ODBC3.0标准提供了76个函数接口,大致可以分为:
分配和释放环境句柄、连接句柄、语句句柄;
连接函数(SQLDriverconnect等);
与信息相关的函数(如获取描述信息函数SQLGetinfo、SQLGetFuction);
事务处理函数(如SQLEndTran);
执行相关函数(SQLExecdirect、SQLExecute等);
编目函数,ODBC3.0提供了11个编目函数如SQLTables、SQLColumn等。应用程序可以通过对编目函数的调用来获取数据字典的信息如权限、表结构等。

62
Q

句柄及其属性

A

句柄是32位整数值,代表一个指针。ODBC3.0中句柄可以分为环境句柄(SQLHENV)、连接句柄(SQLHDBC)、语句句柄(SQLHSTMT)或描述符句柄四类,对于每种句柄不同的驱动程序有不同的数据结构。
1。每个ODBC应用程序需要建立一个ODBC环境,分配一个环境句柄,存取数据的全局性背景如环境状态、当前环境状态诊断、当前在环境上分配的连接句柄等。
2。一个环境句柄可以建立多个连接句柄,每一个连接句柄实现与一个数据源之间的连接。
3。在一个连接中可以建立多个语句句柄,它不只是一个SQL语句,还包括SQL语句产生的结果集以及相关的信息等。
4。在ODBC3.0中又提出了描述符句柄的概念,它是描述SQL语句的参数、结果集列的元数据集合。

63
Q

数据类型

A

ODBC定义了两套数据类型,即SQL数据类型和C数据类型。SQL数据类型用于数据源,而C数据类型由于应用程序的C代码。应用程序可以通过SQLGetTypeInfo来获取不同的应用程序对于数据类型的支持情况。
SQL数据类型和C数据类型之间的转换规则:
SQL数据类型-SQL数据类型:数据源之间转换
SQL数据类型-C数据类型:从结果集列中返回到应用程序变量(SQLBindcol)
C数据类型-SQL数据类型:应用程序变量传送到语句参数
C数据类型-C数据类型:应用程序变量之间转换

64
Q

ODBC的工作流程

A
使用ODBC的应用系统大致的工作流程,从开始配置数据源到回收各种句柄:
1。配置数据源(动态配置数据源)
2。初始化环境
3。建立连接
4。分配语句句柄
5。执行SQL语句
(判断有无结果集)
6。结果集处理
7。中止处理
涉及不同的RDBMS中的数据源,使用ODBC来开发应用程序,只要改变应用程序中连接函数(SQLConnect)的参数,就可以连接不同的RDBMS的驱动程序,连接两个数据源。
65
Q

配置数据源的方法

A

1。运行数据源管理工具来进行配置。

2。使用Driver Manager提供的ConfigDsn函数来增加、修改或删除数据源。这种方法特别适用于在应用程序中创建的临时使用的数据源。

66
Q

初始化环境

A

由于还没有和具体的驱动程序相关联,不是由具体的数据库管理系统驱动程序来进行管理,而是由Driver Manager来进行控制,并配置环境属性。直到应用程序通过调用连接函数和某个数据源进行连接后,Driver Manager才调用所连的驱动程序中的SQLAllocHandle,来真正分配环境句柄的数据结构。

67
Q

建立连接

A

应用程序调用SQLAllocHandle分配连接句柄,通过SQLConnect、SQLDriverConnect或SQLBrowseConnect与数据源连接。其中SQLConnect是最简单的连接函数,输入参数为配置好的数据源名称、用户ID和口令。

68
Q

分配语句句柄

A

在处理任何SQL语句之前,应用程序还需要首先分配一个语句句柄。语句句柄含有具体的SQL语句以及输出的结果集等信息。在后面执行的函数中,语句句柄都是必要的输入参数。
应用程序还可以通过SQLSetStmtAttr来设置语句属性(也可以使用默认值)。

69
Q

执行SQL语句

(判断有无结果集)

A

应用程序处理SQL语句的方式有两种:
1。预处理(SQLPrepare、SQLExecute适用于语句的多次执行)
2。直接执行(SQLExecDirect)
如果SQL语句含有参数,应用程序为每个参数调用SQLBindParameter,并把它们绑定至应用程序变量。这样应用程序可以直接通过改变应用程序缓冲区的内容从而在程序中动态的改变SQL语句的具体执行。接下来的操作则会根据语句的类型来进行相应处理。
有结果集的语句(select或是编目函数),则进行结果集处理。
没有结果集的函数,可以直接利用本语句句柄继续执行新的语句或是获取行计数(本次执行所影响的行数)之后继续执行。

70
Q

结果集处理

A

应用程序可以通过SQLNumResultCols来获取结果集中的列数;通过SQLDescribeCol或是SQLColAttribute函数来获取结果集每一列的名称、数据类型、精度和范围。以上两步对于信息明确的函数是可以省略的。
ODBC中使用游标来处理结果集数据。游标可以分为forward-only游标和可滚动(scroll)游标。forward-only游标只能在结果集中向前滚动,它是ODBC的默认游标类型。可滚动(scroll)游标又可以分为静态(static)、动态(dynamic)、码集驱动(keyset-driven)和混合(mixed)型四种。
ODBC游标的打开方式不同于嵌入式SQL,不是显式声明而是系统自动产生一个游标(Cursor),当结果集刚刚生成时,游标指向第一行数据之前。应用程序通过SQLBindCol,把查询结果绑定到应用程序缓冲区中,通过SQLFetch或是SQLFetchScroll来移动游标获取结果集中的每一行数据。对于如图像这类特别的数据类型当一个缓冲区不足以容纳所有的数据时,可以通过SQLGetData分多次获取。最后通过SQLCloseCursor来关闭游标。

71
Q

中止处理

A

处理结束后,应用程序将首先释放语句句柄,然后释放数据库连接,并与数据库服务器断开,最后释放ODBC环境。

72
Q

数据源

A

数据源是最终用户需要访问的数据,包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。
ODBC给每个被访问的数据源指定唯一的数据源名,并映射到所有必要的、用来存取数据的低层软件。在连接中,用数据源名来代表用户名、服务器名、所连接的数据库名等。最终用户无需知道DBMS或其他数据管理软件、网络以及有关ODBC驱动程序的细节,数据源对最终用户是透明的。
在开发ODBC数据库应用程序时首先要建立数据源并给它命名。