一,嵌入式SQL
SQL语言是基于关系数据模型的语言,而高级语言是基于整数、实数、字符、记录、数组等数据类型,因此两者之间尚有很大差别。如:SQL语句不能直接使用指针、数组等数据结构,而高级语言一般不能直接进行集合运算。
SQL语言的使用有两种方式:
1)在终端交互方式下独立使用的SQL称为交互式SQL。
2)嵌入到程序设计语言中(即宿主语言)使用的SQL称为嵌入式SQL。
而交互式SQL有一些局限,比如普通用户必须通过数据库应用程序来使用,特别复杂的检索结果难以用一条交互式SQL语句完成,此时需要结合高级语言中经常出现的顺序,分支和循环结构帮助处理。
所以出现了嵌入式SQL(嵌入式SQL是将SQL嵌入到某一种高级语言之中,如C/C++,Java等 这种高级语言被称为宿主语言),它的一些特性能解决许多问题:
- 继承了高级语言的过程控制性
- 结合了SQL语言的复杂结果集操作的非过程性
- 为数据库操作者提供了安全可靠的操作方式:通过应用程序进行操作
(1 )变量的声明和使用

比较单纯的交互式SQL的好处:

(2)嵌入式SQL与数据库的连接和断开


(3)SQL执行的提交和撤销

(4)事务

在遇到提交或撤销语句前,所有的SQL语句看做一个 同一个事务。

(5)嵌入式SQL的例子


(6)游标
游标是SQL 的一种数据访问机制 ,游标是一种处理数据的方法。众所周知,使用SQL的select查询操作返回的结果是一个包含一行或者是多行的数据集,如果我们要对查询的结果再进行查询,比如(查看结果的第一行、下一行、最后一行、前十行等等操作)简单的通过select语句是无法完成的,因为这时候索要查询的结果不是数据表,而是已经查询出来的结果集。游标就是针对这种情况而出现的。我们可以将“ 游标 ”简单的看成是结果集的一个指针,可以根据需要在结果集上面来回滚动,浏览我需要的数据。





例子如下:


一般情况下,游标只能从最开始的指针位置依次往下fetch

但是


(7)状态捕获



比如:

(8)动态SQL(针对静态SQL而言)
静态SQL,在编译阶段就可以确定数据库要做什么事情。在某种高级语言中,如果嵌入了SQL语句,而这个SQL语句的主体结构已经明确,例如在Java的一段代码中有一个待执行的SQL“select * from t1 where c1>5”,在Java编译阶段,就可以将这段SQL交给数据库管理系统去分析,数据库软件可以对这段SQL进行语法解析,生成数据库方面的可执行代码,这样的SQL称为静态SQL。
动态SQL,而如果嵌入的SQL没有明确给出,如在Java中定义了一个字符串类型的变量sql:String sql;,然后采用preparedStatement对象的execute方法去执行这个sql,该sql的值可能等于从文本框中读取的一个SQL或者从键盘输入的SQL,但具体是什么,在编译时无法确定,只有等到程序运行起来,在执行的过程中才能确定,这种SQL叫做动态SQL。例如每一种数据库软件都有能够执行SQL语句的界面,那个界面接收的SQL就是动态SQL,因为数据库厂商在做这个界面时,并不知道用户会输入哪些SQL,只有在该界面执行后,接收了用户的实际输入,才知道SQL是什么。另外还要注意一点,在SQL中如果某些参数没有确定,如"select * from t1 where c1>? and c2<?",这种语句是静态SQL,不是动态SQL,虽然个别参数的值不知道,但整个SQL的结构已经确定,数据库是可以将它编译的,在执行阶段只需将个别参数的值补充进来即可。


1)动态SQL的构造
通过动态sql可以提高运行程序的灵活性,使我们可以方便地实现多条件下的数据库操作。
2)动态SQL的执行


二,数据字典


三,ODBC

ODBC作用体现在:


应用程序运行后,为维护执行的状态,ODBC 管理器和ODBC 驱动程序中必须保持足够的控制信息。应用程序要求ODBC 管理器和ODBC 驱动程序为ODBC环境、每个连接以及每个SQL语句分配描述/控制信息存储空间,并返回指向各个存储区的句柄供其使用。
(1)环境句柄:整个ODBC上下文的根句柄。标识全程数据访问控制信息的内存结构,包括有效连接句柄以及当前活动连接句柄。ODBC将环境句柄定义为HENV类型的变量。应用程序使用单一的环境句柄,在连接到数据源以前必须申请该句柄。
(2)连接句柄:管理有关数据库会话的所有信息。连接句柄标识每个特定的连接信息的内存结构。ODBC将环境句柄定义为HDBC类型的变量。应用程序在连接数据源之前申请连接句柄。每个连接句柄与环境句柄有关,环境句柄上可以有多个与其有关的连接句柄。
(3)语句句柄:ODBC语句包括应用访问数据源的SQL语句和语句相关的管理信息,语句句柄标识每个语句管理信息的内存结构。ODBC将语句句柄定义为HSTMT类型的变量。应用程序在提交SQL请求之前也必须申请语句句柄。每个语句句柄与一个连接句柄有关,每个连接句柄上可以有多个与其有关的语句句柄。
ODBC程序执行流程
Ø 分配环境句柄
Ø 分配连接句柄
Ø 建立数据源
使用已分配的连接句柄来建立应用程序和数据源/数据库系统的连接,进行句柄和数据源的绑定。
Ø 分配语句句柄
用户对DBC数据源的存取操作,都是通过SQL语句实现的。
Ø 执行SQL语句
如果SQL语句被顺利提交并正确执行,那么就会产生一个结果集。检索结果集的方法有很多,最简单最直接的方法是调用SQLFetch 和SQLGetData 函 数。SQLFetch函数的功能是将结果集的当前记录指针移至下一个记录;SQLGetData函数的功能是提取结果集中当前记录的某个字段值。
Ø 结束应用程序
在应用程序完成数据库操作, 退出运行之前,必须释放程序中使用的系统资源。
错 误 处 理
所有DBCAPI函数,若在执行期间发生错误,都将返回一个标准错误代码SQL_ERROR。
一般来讲,在每次调用ODBC API 函 数 之 后, 都应该检查该函数返回值,确定该函数是否成功地执行,再决定是否继续后续过程。 而详细的错误信息,可以调用SQLError 函数获得。SQLError 函数将返回下列信息: 标准的ODBC错误状态码 ODBC 数据源提供的内部错误编码错误信息串。
四,JDBC(Java版的ODBC)


核心API:


















