重点与难点
- 熟练掌握 SQL语句的动态构造技巧
- 了解数据字典的作用,掌握使用技巧
- 了解 ODBC/JDBC的工作原理
一. 动态SQL的概念和作用
- 要解决的问题:
- 问题 3:SQL语句如何执行
- 问题 2:动态 SQL,依据条件动态构造 SQL语句,但欲访问的表名和字段名对编程者已知
1. 动态SQL的概念和作用
动态SQL是相对静态SQL而言的
- 静态SQL 特点:SQL语句在程序中已经按要求写好,只需要把一些参数通过变量(高级语言程序语句中不带冒号)传送给嵌入式SQL语句即可(嵌入式SQL语句中带冒号)
- 动态SQL 特点:SQL语句可以在程序中动态构造,形成一个字符串(就是一条SQL语句),然后再交给DBMS执行,交给DBMS执行时仍旧可以传递变量(动态SQL语句的构造,如何被执行)
2. 动态SQL构造小结(案例:作业二)
3. 动态SQL语句的执行方式
立即执行语句:运行时编译并执行
- ```c strcpy(sqltext, "delete from customers where cid = 'C01'"); exec sql execute immediate :sqltext; exec sql commit work;
1
2
3
4
5
6
7
8
- ***<u>Prepare-Execute-Using语句(延迟执行):</u>PREPARE语句先编译,编译后的 SQL语句运行动态参数,EXECUTE语句执行,USING语句将动态参数值传送给编译好的 SQL语句***
- ```c
strcpy(sqltext, "delete from customers where cid = :dcid");
exec sql prepare delcust from :sqltext; /* prepare statement */
exec sql execute delcust using :cust_id; /* using clause replaces ":n" above */
exec sql commit work;
- ```c strcpy(sqltext, "delete from customers where cid = 'C01'"); exec sql execute immediate :sqltext; exec sql commit work;
区别:构造的字符串 SQL内部有没有“变量 ”参数,P-E-U语句主要是高级语言要向SQL传递变量
二. 数据字典与SQLDA
要解决的问题:
- 问题 8:依据条件动态 SQL的构造问题,表名和字段名对程序员未知
1. 数据字典的概念
数据字典又称为系统目录:是系统维护的一些表或视图的集合,这些表或视图存储了数据库中各类对象的定义信息(包括表、列、索引、视图、权限、约束等),这些信息又称数据库的 元数据——关于数据的数据。
不同DBMS中系统目录存储方式可能是不同的,但会有一些信息对DBA公开。这些公开的信息,DBA可以使用一些特殊的SQL命令来检索。
2. 数据字典的内容构成
数据字典通常存储的是数据库和表的元数据,即模式本身的信息:
- 与关系相关的信息(名字、属性名及其类型、视图名字及其定义、完整性约束)
- 用户与账户信息,包括密码
- 统计与描述性数据(如关系元组数目)
- 物理文件组织信息(关系存储方式,关系的物理结构)
- 索引相关的信息
3. 数据字典的表结构或视图
数据字典的结构:存储在磁盘上的关系,为内存高效访问设计的特定数据结构
4. X/Open标准的系统目录
X/Open标准中有一个目录表Info_Schem.Tables,表中的一行是应该已经定义的表的相关信息
模式的含义是指某一用户所设计和使用的表、索引及其他与数据库有关的对象的集合,因此表的完整名应是:模式名.表名
。这样做可允许不同用户使用相同的表名,而不混淆。
5. Oracle 数据字典
Oracle数据字典由视图组成,分为三种不同形式,由不同的前缀标识
- USER_:用户视图,用户所拥有的对象,在用户模式中
- ALL_:扩展的用户视图,用户可访问的对象
- DBA_:DBA视图(所有用户都可访问的DBA对象的子集)
例1:关于表 的信息
例2:关于表的列的信息
1 | // 获取Oracle定义的所有视图信息 |
6. SQLDA
SQLDA(SQL Description Area):SQL描述符区域,是一个内存数据结构,内可装载关系模式的定义信息
SQLDA储存的是数据库和表的一些定义信息
三. ODBC
1. ODBC简介
ODBC (Open DataBase Connection):不同语言的应用程序 之间与不同数据库服务器之间 的通讯标准
统一接口,具体的DBMS通过一些Driver驱动程序(被ODBC安装),由ODBC调用,传递给不同的DBMS来对数据库进行操作。
2. ODBC连接数据库服务器
- 确认具体 DBMS Driver 被安装到 ODBC 环境
- 应用程序调用 ODBC API 时,ODBC API 会调用具体 DBMS Driver 库函数,DBMS Driver 库函数则与数据库服务器通信,执行相应的请求动作返回检索结果
- ODBC 应用程序首先要分配一个 SQL 环境,再产生一个数据库连接句柄
- 应用程序使用 SQLConnect() 打开一个数据库连接
3. ODBC 其他功能
- 动态SQL语句的预编译——动态参数传递功能
- 获取元数据特征(发现数据库中的所有关系特征,以及每一个查询结果的列的名字和类型等)
- 默认每一条SQL语句都被作为一个独立的能够自动提交的事务来处理
四. JDBC
1. 概念
JDBC (Java DataBase Connection):Java版的应用程序接口API,提供了Java应用程序与数据库服务器的连接和通讯能力,分为Java.sql核心API和Javax.sql可选扩展API两个程序包。
2. JDBC功能
- java.sql.Statement——对特定的数据库执行SQL语句
- java.sql.PreparedStatement——用于执行预编译的SQL语句
- java.sql.CallableStatement——用于执行对数据库内嵌过程的调用
- java.sql.ResultSet——从当前执行的SQL语句中返回结果数据
- java.sql.DriverManager——处理驱动的调入并且对产生新数据库连接提供支持
- Java.sql.Driver——通过驱动进行数据库访问,连接到数据库的应用程序必须具备 该数据库的特定驱动。
- java.sql.Connection——代表对特定数据库的连接。
- Try {...} Catch {...}——异常捕获及其处理
3. JDBC API 访问数据库过程
概念性的基本过程:打开一个连接
创建“Statement”对象,并设置查询语句 使用Statement对象执行查询,发送查询给数据库服务器和返回结果给应用程序 处理错误的例外机制
具体过程:
- 传递一个Driver给DriverManager,加载数据库驱动
- Class.forName()
- 通过URL得到一个Connection对象,建立数据库连接
- DriverManager.getConnection(sDBUrl)
- DriverManager.getConnection(sDBUrl,sDBUserID,sDBPassword)
- 接着创建一个Statement对象(PreparedStatement或CallableStatements),用来查询或者修改数据库
- Statement stmt=con.createStatement()
- 查询返回一个ResultSet
- ResultSet rs=stmt.executeQuery(sSQL)
4. JDBC和ODBC比较
嵌入式 SQL思维模式
ODBC思维模式
JDBC思维模式