1.DAO: Data Access Object 数据访问对象
1993年Microsoft为了让程序员能够存取Access数据库,使用OLE Automation技术封装了Jet Engine 。这些使用Jet Engine 存取Access数据库的OLE Automation Object便称为Data Access Object(DAO)。
是微软的VB3.0中提供的数据访问技术,它允许访问和处理本地数据库,象access,缺点是不能访问远程数据库。因此DAO在存取Access数据库时非常有效率,但是在存取其他的数据源时却表现得不怎么好。DAO是Microsoft一种用来访问Jet引擎的方法,主要用来访问Access数据库,使用起来比较简单。
于是乎微软在vb4.0中提供了RDO远程数据访问技术,它可以有效的访问象oracle&sql server这样的远程数据库,但也有问题就是它对本地数据库访问效果很差,所以在vb6.0中才出现了ADO,综合了前两个版本的优点,支持对关系和非关系数据库的访问,也支持访问其他的数据源,如:电子表格、email等。
2. RDO(Remote Data Objects,远程数据对象)
RDO (Remote Data Objects) 远程数据对象是一个到 ODBC的、面向对象的数据访问接口,它同易于使用的 DAO style组合在一起,提供了一个接口,形式上展示出所有 ODBC 的底层功能和灵活性。尽管 RDO 在很好地访问 Jet 或 ISAM 数据库方面受到限制,而且它只能通过现存的 ODBC 驱动程序来访问关系数据库。但是,RDO 已被证明是许多 SQL Server、Oracle 以及其他大型关系数据库开发者经常选用的最佳接口。RDO 提供了用来访问存储过程和复杂结果集的更多和更复杂的对象、属性,以及方法。
RDO(Remote Data Objects)处理一组对象以完成远程资料的存取,它是在ODBC API和驱动程序之上的一个可程序的薄层(thin code layer),用以建立资料结果集(result set)和光标,以及用最小的工作站资源执行复杂的程序。
注意RDO祇能在32位的操作系统上执行
3.ADO (ActiveX Data Objects,ActiveX数据对象)
是Microsoft提出的应用程序接口(API)用以实现访问关系或非关系数据库中的数据
由于OLE DB位于底层,只能由C++这样的OO语言直接实现,而不能用VB这样的高层 4G语言来实现,所以微软将对OLE DB的访问封装成对象,即ActiveX 数据对象(ADO),可以由vb这样的语言来调用它对OLE DB操作。
ADO是一种基于COM的数据库访问技术,可以访问关系数据库与非关系数据库,由于它是基于COM的,访问速度也较快,占用资源较小。
发展历程看是:dao--rdo--ado,dao主要是为单机环境准备其中的一些概念很好理解,这也是它比较容易使用的原因。
RDO是专门为网络环境开发的一组对象,是基于odbc的一组接口,使用起来只能用于结构型数据库。而ADO是ACTIVEX数据对象,基于OLE DB的编程接口,而且能支持结构型数据库和非结构型数据库,而且微软将来的. NET平台的数据库也是基于OLE DB和ADO的,所以ADO有很强的适用性
ADO 对象总结
对象
|
说明
|
Command
|
Command 对象定义了将对数据源执行的指定命令。
|
Connection
|
代表打开的、与数据源的连接。
|
DataControl (RDS)
|
将数据查询
Recordset 绑定到一个或多个控件上(例如,文本框、网格控件或组合框),以便在 Web 页上显示
ADOR.Recordset 数据。
|
DataFactory (RDS Server)
|
实现对客户端应用程序的指定数据源进行读/写数据访问的方法。
|
DataSpace (RDS)
|
创建客户端代理以便自定义位于中间层的业务对象。
|
Error
|
包含与单个操作(涉及提供者)有关的数据访问错误的详细信息。
|
Field
|
代表使用普通数据类型的数据的列。
|
Parameter
|
代表与基于参数化查询或存储过程的
Command 对象相关联的参数或自变量。
|
Property
|
代表由提供者定义的 ADO 对象的动态特性。
|
RecordSet
|
代表来自基本表或命令执行结果的记录的全集。任何时候,
Recordset 对象所指的当前记录均为集合内的单个记录。
|
ADO 事件
ActiveX 数据对象 (ADO) 是添加到 Microsoft Active Server Pages (ASP) 的一套高级别接口,有利于服务器端与数据库的连接。ADO 与低级别接口 (OLE DB) 一起使用则有利于 Microsoft Universal Data Access 策略。ADO 2.0 版可生成 Visual Studio Analyzer 事件。可使用这些事件跟踪分布式应用程序中的 ADO 交互。
ADO 生成的 Visual Studio Analyzer 事件
事件
|
事件描述
|
事件数据
|
ConnectionClose
|
指示
ADO 要与 OLE DB 数据源断开连接。
|
无。
|
ConnectionOpen
|
指示
ADO 正在连接到 OLE DB 数据源。
|
如果客户端提供,则为连接到数据源所用的连接字符串。
|
Find
|
指示 ADO 客户端已调用
ADO
Recordset.Find 函数。
|
“查找”操作的判据;根据该判据匹配记录。
|
GetRows
|
指示
ADO 客户端已调用 ADO
Recordset.GetRows 函数。
|
提取的行数。
|
QueryResult
|
指示数据库已返回响应查询的结果集。
|
无。
|
QuerySend
|
指示
ADO 正在执行命令。该事件可由下列函数触发:
Connection.Execute
Command.Execute Connection.<存储过程名> Recordset.Open |
构成查询的 SQL 语句。
|
RecordsetOpen
|
指示
ADO 正在打开远程服务器上的记录集。仅适用于三层方案。
|
打开记录集的源(通常为行返回的命令文本)。
|
Sort
|
指示 ADO 准备筛选或对数据排序。
|
排序或筛选应用于记录集数据的判据。
|
Transaction Rollback
|
指示
ADO 要中止当前本地事务。
|
返回真或假。如果为真,则保持中止,即该事务中止后紧跟着开始另一事务。如果为假,则不保持中止。
|
TransactionCommit
|
指示 ADO 正在提交 OLE DB 提供程序上的本地事务。
|
返回真或假。如果为真,则保留提交,即该事务提交后紧跟着开始另一事务。如果为假,则不保留提交。
|
TransactionStart
|
指示 ADO 正在开始 OLE DB 提供程序上的本地事务。
|
ADO 开始事务所基于的隔离级别。隔离级别指示可看到其他事务所做更改的哪一级别。
|
UpdateBatch
|
指示 ADO 正在向提供程序发送更新批处理。仅适用于三层方案。
|
如果有,为 ADO 将更新发送到的远程服务器名。
|
4.ODBC(Open Database Connectivity,开放数据库互连)
它定义了一个标准的方法来实现应用程序和数据库之间的通讯,它实际上是通过一组系统API来实现的。实际上起到了对sql语句的翻译作用,使之可以在不同的数据库上运行。
ODBC是Microsoft的基于关系数据库一种互连技术,它只能访问关系数据库。
全称为开放式数据库互联,它定义了一个标准的方法来实现应用程序和数据库之间的通讯,它实际上是通过一组系统API来实现的。实际上起到了对sql语句的翻译作用,使之可以在不同的数据库上运行。
ODBC是Microsoft的基于关系数据库一种互连技术,它只能访问关系数据库。
一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。
5.OLE DB(Objects Link Embed DataBase对象链接嵌入数据库)
它是一种数据库结构,它可以使程序具有对存储于不同信息源的数据的一致访问。说白了就是能用select * from table这样的语句来访问不同类型的数据库,如access,sql server。
OLE DB是微软“发明”的,用来淘汰ODBC的,OLE DB不光可以连接各种数据库,还可以连接exchange、活动目录、甚至操作系统文件目录等各种数据库源.
层次关系:
应用程序 -> ADO -> ODBC -> OLE DB -> 数据源
或者
应用程序 -> ADO -> OLE DB -> 数据源
6.JDBC(Java Data Base Connectivity,java数据库连接)
它是专门针对java的一种数据库访问技术,可以实现java对不同数据源的一致性访问。全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库。我们先来看看第一种JDBC<-->ODBC访问的流程:JDBC Driver Mannager->局部JDBC驱动->客户端数据库->数据库服务器->返回查询结果,这种访问事实上是转换JDBC调用为相应的数据库(Oracle, Sybase, Informix, DB2, 和其他的数据库数据库管理系统)的客户端API调用(说简单点就好像ASP不是通过DSN对数据库访问而是通过OLEDB访问)。
JDBC的最大特点是它独立于具体的关系数据库。与ODBC (Open Database Connectivity)类似, JDBC API 中定义了一些Java类分别用来表示与数据库的连接(connections), SQL语句(SQL statements), 结果集(result sets)以及其它的数据库对象, 使得Java程序能方便地与数据库交互并处理所得的结果。使用JDBC, 所有Java程序(包括Java applications , applets和servlet)都能通过SQL语句或存储在数据库中的过程(stored procedures)来存取数据库。
要通过JDBC来存取某一特定的数据库,必须有相应的JDBC driver,它往往是由生产数据库的厂家提供,是连接JDBC API与具体数据库之间的桥梁。
通常,Java程序首先使用JDBC API来与JDBC Driver Manager交互,由JDBC Driver Manager载入指定的JDBC drivers, 以后就可以通过JDBC API来存取数据库。
JDBC driver 是用于特定数据库的一套实施了JDBC接口的类集。共有四种类型的JDBC driver:
类型1的driver称为"JDBC-ODBC bridge driver", 这种类型的driver能使客户端通过JDBC调用连接到一个使用ODBC driver的数据库。使用这类driver需要每个客户端机器都装上数据库对应的ODBC driver,但该ODBC driver不一定要跟Java兼容。
类型2的driver将JDBC调用转换为特定的数据库调用。这类driver通常称为"native-API, partly Java driver"。与类型1的driver一样,这类driver也要求客户端的机器安装相应的二进制代码。所以这类driver不太适合于使用数据库的Applet。
类型3的driver称为 "JDBC-Net pure Java driver", 它能将JDBC的调用转换为独立于数据库的网络协议。这种类型的driver特别适合于具有中间件(middle tier)的分布式应用,但目前这类driver的产品不多。
类型4的driver, 又称 "native protocol, pure Java driver",它能将JDBC调用转换为数据库直接使用的网络协议。类型4的driver不需要安装客户端软件,它是100%的Java程序,使用Java sockets来连接数据库,所以它特别适合于通过网络使用后台数据库的Applet。
JDBC 的用途
简单地说,JDBC 可做三件事:与数据库建立连接、发送 SQL 语句并处理结果。下列代码段给出了以上三步的基本示例:
Connection con = DriverManager.getConnection("jdbc:odbc:wombat","login",
"password");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
上述代码对基于JDBC的数据库访问做了经典的总结,当然,在本小节的后续部分会对它做详尽的分析讲解。
补充:
DSN---Data Source Name,数据源名
BDE---Borland Database Engine,Borland数据库引擎
JET--- Joint EngineTechnology,数据连接性引擎技术