




已阅读5页,还剩108页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章 数据库访问接口,第五章 数据库访问接口,5.1 概述 5.2 ODBC与DAO对象 5.3 JDBC原理与应用 5.4 OLE DB和ADO 5.5 数据库中间件,5.1 概述,DBMS是非常复杂的软件,编写程序通过某种数据库专用接口与其通信是非常复杂的工作,为此,产生了数据库的客户访问技术,即数据库访问技术。 开放的数据库访问接口为数据库应用程序开发人员访问与不同的、异构的数据库提供了统一的访问方式,采用这种数据库接口可以通过编写一段代码实现对多种类型数据库的复杂操作。实现了开放数据库的互联,并大大减小了编程的工作量和开发时间。,目前流行的开放数据库访问接口有: ODBC JDBC OLE DB 数据库网关(SQL网关)。,(1)ODBC,ODBC是Microsoft公司推出的开放数据库接口标准。ODBC为应用程序和驱动模块提供了一个定义良好的、不依赖于数据库的应用程序接口(API)。并且保持了与SQL标准的一致性。 使用API时,ODBC通过一个驱动管理器来判定应用程序要连接的数据库的类型,并载入(或卸载)对应的ODBC驱动。这样,就实现了应用程序和数据库之间的相互独立,简化了从Windows操作系统(以及其他一些操作系统)到数据库的访问。 目前,越来越多的第三方厂商在设计应用开发集成环境时,积极采用ODBC技术,使应用开发工具可通过ODBC实现对异构数据库的快捷和方便的访问。,(2)JDBC,JDBC(Java Database Connectivity)是JavaSoft提供的第一个支持lava语言的数据库API 它支持基本SQL功能,在不同的数据库功能模块的层次上为Java开发人员提供了一个支持Java开发或支持Java应用程序运行的环境访问各种数据库的统一的用户界面,同时还提供了多样化的数据连接方式。 JDBC主要由两层组成:JDBC应用程序接口(JDBC API)和JDBC驱动应用程序接口。 JDBC API提供从应用程序到JDBC管理器的通讯,开发者通过API使用标准Java机制访问数据库。 数据库供应商提供JDBC驱动接口,也可以通过JDBC-ODBC连接桥使用传统的0DBC连接:,(3)OLE DB,OLE DB定义了一个访问服务器的集合,通过这些服务器可以很容易地连接到任意数目的数据源。这样,开发者就可以把多种不同的数据源作为单一的虚拟数据库来管理。OLE DB允许使用标准的COM接口访问数据。 OLE DB为开发者提供访问关系数据库、文件、扩展表、电子邮件等数据的方法。通过COM接口,开发者可以使用OLE DB方便地集成面向对象的数据库和多维数据库。 核心思想是生成独立的OLE DB组件对象,用以调度数据提供者的各种附加特性和功能。这些独立的OLE DB组件叫做“服务提供者”,允许应用程序使用它们实现不同数据联合(同构的或异构的)之间的互联。数据以单一的视图的形式存在,而不管它们的数据模型是关系型的、面向对象的,还是多维的。,(4)数据库网关,数据库网关也叫SQL网关,是一种应用程序接口(API),通过使用同一接口提供对运行在多种平台上的不同数据库的访问。它们类似于实际的数据库中间件产品,为开发者提供访问任意数目数据库的接口。 数据库网关把SQL调用解释成为标准PAP(Format and Protocol)格式。PAP格式实现通用的客户机和服务器连接,也就是异构数据库和运行平台的通用连结。 数据库网关可以把API调用直接翻译成PAP,把请求传递到目标数据库并翻译,以便目标数据库和平台做出响应。,第五章 数据库访问接口,5.1 概述 5.2 ODBC与DAO对象 5.3 JDBC原理与应用 5.4 OLE DB和ADO 5.5 数据库中间件,5.2 ODBC与DAO对象,5.2.1 ODBC和DAO概述 5.2.2 ODBC的使用 5.2.3 DAO的使用,5.2.1 ODBC和DAO概述,(1)ODBC概述 ODBC是80年代末90年代初出现的技术,它为编写关系数据库的客户软件提供了统一的接口。ODBC提供统一的API,可用于处理不同数据库的客户应用程序。 使用ODBC API的应用程序可以与任何具有ODBC驱动程序的关系数据库进行通信。由于ODBC为关系数据库提供了统一的接口,现在已经被广泛应用,并逐渐成为关系数据库接口的标准。,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。 ODBC的最大优点是能以统一的方式处理所有的关系数据库。 但是,ODBC仅限于关系数据库,由于ODBC的关系型特性,很难使用ODBC与非关系数据源进行通信,例如对象数据库、网络目录服务、电子邮件存储等。,(2)DAO概述 DAO(Database Access Object,数据访问对象)属于数据访问客户端。是第一个面向对象的数据库访问接口。 DAO是Microsoft一种用来访问Jet引擎的方法,主要适用于单系统应用程序或在小范围本地分布中实现对桌面数据库(如Access、FoxPro、dBase等)的访问。 使用DA0的程序编码非常简单。它提供了完成关系数据库系统管理所需的全部操作的属性和方法:包括创建数据库,定义表、字段和索引,以及建立表间的关系,定位和查询数据库等工具。,Jet(Joint Engine Technology,数据连接引擎技术)是一种基于工作站,通过DA0访问数据库的机制。 Jet机制有自己的查询和结果集处理功能,并可对同构或异构数据源作查询处理。 Jet技术目前已经达到了4.0版本,它是DA0,Access,VB等Windows应用进行数据库访问的基础。 引擎本身的数据库格式为MDB,也支持对目前流行的绝大多数数据库格式的访问,当然MDB是数据库引擎中效率最高的数据库。,(3)ODBC与DA0的区别 ODBC和DA0的区别在于它们访问数据库的机制不同。 0DBC的工作依赖于数据库制造商提供的驱动程序,使用ODBC API的时候,Windous的ODBC管理程序把数据库访问的请求传递给正确的驱动程序,驱动程序再使用SQL语句指示DBMS完成数据库访问工作。 而DA0则可以绕开了中间环节,直接使用Microsoft提供的数据库连接性引擎技术(Jet)对数据库访问对象集进行工作,速度比0DBC快。 ODBC是一种通用数据访问模型,而DAO更多的是作为一种数据访问客户端。 一般来说DA0是本机Access数据库数据源首选的访问接口,但在客户/服务器体系结构上不如ODBC功能强大。,5.2.2 ODBC的使用,1. ODBC的组成和结构 2. ODBC的基本工作流程 3. 使用ODBC MFC类 4. ODBC数据源的管理,1. ODBC的组成和结构,一个完整的ODBC由四个部分组成:应用程序接口、驱动程序管理器、数据库驱动程序和数据源。,ODBC组件图,(1)应用程序接口 负责处理并调用ODBC函数、发送对数据库的SQL请求及取得结果。 它并不直接与数据库打交道,因此,屏蔽了不同ODBC数据库驱动器之间函数调用的差异,屏蔽了底层数据库系统的不同。为用户提供统一的SQL编程接口和调用级界面,方便访问来自多种DBMS的数据。 (2)驱动程序管理器 驱动程序管理器是一个带有输入程序的动态链接库(DLL),主要目的是为应用程序装载数据库驱动程序处理0DBC调用的初始化调用,提供0DBC调用的参数有效性和序列有效性。,(3)数据库驱动程序 数据库驱动程序是一个完成ODBC函数调用并与数据之间相互影响的DLL。 如,当应用程序调用SQLBrowseConnect(),SQLConnect()或SQLDriverConnect()函数时,驱动程序管理器装入驱动程序。如果需要,数据库驱动程序将会修改应用程序的请求,使得请求符合相关的DBMS所支持的文法。 所以,ODBC驱动管理器的目的是加载数据库驱动器,便于ODBC函数调用。 (4)数据源 数据源由用户想要存取的数据以及与它相关的操作系统、DBMS和用于访问DBMS的网络平台组成。 数据源负责为应用程序存储和管理数据。它包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。,ODBC实际上是一种相当底层的访问技术,因此它可以从底层设置和控制数据库,完成一些高级数据库技术无法完成的功能。,2. ODBC的基本工作流程,当应用程序要访问一个数据库时: 首先必须注册一个数据源,ODBC管理器根据数据源提供的信息建立起ODBC与具体数据库的联系。 这样,应用程序只需要将数据源名提供给ODBC,就能建立起与相应数据库的连接。 ODBC API不能直接访问数据库。驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序。而驱动程序在执行完相应的操作之后,将结果通过驱动程序管理器返回给应用程序。 在访问ODBC数据源时,需要ODBC驱动程序的支持。,一个ODBC应用的建立应涵盖以下主要内容: 建立需要操作数据库的应用程序,该程序通过调用ODBC函数提交SQL语句 提供运行环境,该环境应包含数据库驱动程序,它负责处理ODBC函数调用,向数据源提交SQL请求,向应用程序返回结果,必要时将SQL语法翻译成符合DBMS语法规定的格式 具有由用户数据库、DBMS等构成的可供应用程序访问的数据源,具体来说,通过ODBC访问数据库的基本步骤如下: 创立并配置数据源; 建立一个与数据源的对话连接; 向数据源发出SQL请求; 定义一个缓冲区和数据格式用于存储访问结果; 提取结果; 处理各种错误; 向用户报告结果; 关闭与数据源的连接,Microsoft Developer Studio为大多数标准的数据库格式提供了32位ODBC驱动器。这些标准数据格式包括有:SQL Server,Access,Paradox,dBase,FoxPro,Excel,Oracle 以及Microsoft Text。 ODBC API是一个内容丰富的数据库编程接口,包括60多个函数、SQL数据类型以及常量的声明。ODBC API 独立于DBMS和操作系统的,而且它与编程语言无关。 不过直接使用ODBC API比较麻烦,所以微软后来又发展出来DAO、更容易开发程序。,3. 使用ODBC MFC类,ODBC为关系数据库提供了统一的接口,但是ODBC API十分复杂。在Visual C+中,MFC(Microsoft Foundation Classe微软基础类库)提供了一些类, 对ODBC API进行封装,为ODBC编程提供了一个面向对象的方法,ODBC编程的复杂度大大降低。 MFC ODBC类在使用上比ODBC API容易,但是损失了ODBC API对低层的灵活控制,因此,MFC ODBC类属于高级数据库接口。,同ODBC API编程类似,MFC的ODBC编程也要先建立同ODBC数据源的连接,这个过程由一个CDatabase对象的Open函数实现。然后CDatabase对象的指针将被传递到CRecordSet对象的构造函数里,使CRecordSet对象与当前建立起来的数据源连接结合起来。 完成数据源连接之后,大量的数据库编程操作将集中在记录集的操作上。CRecordSet类的丰富的成员函数可以让开发人员轻松地完成基本的数据库应用程序开发任务。 当然,完成了所有的操作之后,在应用程序退出运行状态的时候,需要将所有的记录集关闭,并关闭所有同数据源的连接。,MFC对ODBC的封装主要是开发了CDatabase类和CRecordSet类。 使用CDatabase:OpenEx通过驱动程序建立一个数据源的连接 使用CDatabase:Close关闭与数据源的连接 使用CRecordSet:Open()和Requery()成员函数可以实现记录查询,CDatabase类的成员,CRecordset的类成员,4. ODBC数据源的管理,在0DBC中,应用程序不能直接存取数据库,它必须通过管理器和数据库交换信息。 0DBC管理器负责安装驱动程序,将应用程序的SQL语句及其他信息传遗给驱动程序,并帮助程序员跟踪0DBC的函数调用,而驱动程序则负责将运行结果送回应用程序。 数据源负责将运行结果送回应用程序。数据源在使用之前必须进行创建和配置。 完成这些步骤后,应用程序就能够通过数据源直接操纵数据库。 用户可通过如下两种方式创建或配置数据源: 系统函数调用 ODBC数据源管理程序,下面首先介绍0DBC管理器中各个页面的用途: 用户DSN。0DBC用户数据源存储了如何与指定数据库提供者连接的信息,用户数据源只对当前用户可见,且只能用于当前机器。这里的当前机器是指这个配置只对当前的机器有效,而不是指只能配置本机上的数据库。它可以配置局域网中另一台机器上的数据库。 系统DSN。0DBC系统数据源存储了如何指定数据库提供者连接的信息。系统数据源对当前机器上的所有用户都是可见的,包括NT服务。也就是说在这里配置的数据源,只要是这台机器的用户都可以访问。 文件DSN。0DBC文件数据源允许用户连接数据提供者。文件DSN可以由安装了相同驱动程序的用户共享。这是介于用户DSN和系统DSN之间的一种共享情况,驱动程序。这页列出了本机上所有安装的数据库驱动程序,其中列举了每个驱动程序的名称、版本提供商公司、驱动程序文件名,以及安装日期。 跟踪。0DBC跟踪允许创建调用ODBC的日志,提供给技术人员查看。页面中可设定日志的路径和文件名。技术人员可通过这里面的信息看到本机上所有的数据库访问的时间、用户、出错信息等情况;也可以通过这个辅助调试应用程序启动Visual Studio的分析器来进行ODBC的跟踪。 连接池。连接池允许应用程序重用原来打开的连接。这样可以节省连接到服务器的往返过程。 关于。列出所有的ODBC的核心文件。,配置一个Access数据源的过程如下: 在Windows系统下进入控制面板,打开ODBC数据源,若是Windows 2000平台,则打开管理程序下的数据源ODBC,屏幕上将出现如图所示的“ODBC数据源管理器”对话框,选择所使用的数据库驱动程序,如选择Microsoft Access Driver (*.mdb), 单击“完成”按钮,出现如图所示的对话框,选择“系统DSN”标签,即选择“系统数据源”。 要使系统上的所有应用程序都可以使用它,必须选用系统DSN,这是建立Web站点的需要。 单击“添加”按钮,进入“创建新数据源”对话框,如图所示,在“数据源名”输入框中键入数据源名,单击“选择”按钮为该数据源指定一个已创建好的Access数据库(*.mdb),该数据库应该是在Web应用程序中即将访问的数据库。 单击“确定”按钮,回到“创建新数据源”对话框。 单击“确定”按钮直到关闭ODBC数据管理器, 此时完成一个数据源的建立过程。 若要修改该数据源的配置,可在“ODBC数据源管理器”对话框中选定要更改的数据源,再单击“配置”按钮。,ODBC并不完美,他虽然统一了对多种常用DBMS的访问,但是这个“访问”的过程是非常困难的,他仍然存在大量的低级调用,程序员必须将大量的精力放在底层的数据通信中,而不能专注于所要处理的数据。 为了改善这种极其不友好的接口,使得在程序开发中,数据库访问的工作更加容易,微软提出里一个解决方案:DAO,5.2.3 DAO的使用,DAO是Microsoft的一种用来访问Jet引擎的方法。主要适用于单系统应用程序或在小范围本地分布中实现对桌面数据库(如Access、FoxPro、dBase等)的访问。 Microsoft Jet数据库引擎是一种数据管理组件,许多数据库工具都是基于它实现的, 例如Microsoft Access,Microsoft Visual Basic以及一些Microsoft桌面数据库驱动程序。,DAO结构图,DAO是完全面向对象的,对开发人员来说,只需了解DAO的使用,而由数据库引擎把DAO上的操作转换为对具体的数据库文件的操作。 DAO对象模型是一个分层的树形结构。该结构由对象和集合构成。 其中最重要,使用最频繁的是RecordSet对象。,DAO对象层次图,VC+在4.0版本之后增加了DAO的封装,即MFC的DAO类,使得数据库开发人员可以通过Microsoft Jet数据库引擎访问数据库。 MFC DAO类与DAO对象之间的对应关系,MFC ODBC和MFC DAO的区别: MFC DAO类使用Microsoft Jet数据库引擎操作位于系统数据库和用户数据库中的数据, 它与基于ODBC的MFC数据库类截然不同,DAO通过Microsoft Jet访问数据,而MFC的ODBC类通过ODBC和ODBC驱动程序操作数据。 一般来说,在访问Microsoft Jet数据库引擎,基于DAO的MFC类比基于ODBC的MFC类处理能力更强大。,第五章 数据库访问接口,5.1 概述 5.2 ODBC与DAO对象 5.3 JDBC原理与应用 5.4 OLE DB和ADO 5.5 数据库中间件,5.3 JDBC原理与应用,5.3.1 JDBC概述 5.3.2 JDBC的体系结构 5.3.3 JDBC的接口 5.3.4 JDBC访问数据库的模式 5.3.5 JDBC访问数据库的方法,5.3.1 JDBC概述,JDBC技术是JavaSoft公司设计的Java语言的数据库访问API。 ODBC主要是对数据库系统的C语言接口 最初的Java语言并没有数据库访问能力。JDBC是第一个支持Java语言的标准的数据库API 其目的在于使Java程序与数据库服务器的连接更加方便。在功能方面JDBC与ODBC相同,它给程序员提供了统一的数据库访问接口。,与ODBC相似,JDBC提供给程序员的编程接口是由两部分组成: 一是面向应用程序的编程接口JDBC API,它是为应用程序员提供的,可以进行数据库连接和调用SOL语句访问支持JDBC的数据库,并得到返回结果; 二是供底层开发的驱动程序接口JDBC Driver API,它是各个数据库厂商提供的。 值得一提的是,JavaSoft提供了一种特殊的驱动程序,JDBC-ODBC桥,它支持JDBC通过现有的ODBC来访问数据库系统。 目前,JDBC已经得到了许多厂商的支持,包括Borland, IBM、Oracle和Sybase等公司。当前流行的大多数数据系统都推出了自己的JDBC驱动程序。,5.3.2 JDBC的体系结构,JDBC的总体结构类似于ODBC,也由四个部件组成:应用程序接口、驱动程序管理器、数据库驱动程序和数据源。,JDBC的数据库驱动程序有四类: JDBC-ODBC桥(bridge) JDBC-ODBC桥利用ODBC驱动程序提供JDBC访问。 在服务器上必须可以安装ODBC驱动程序。 作为JdbcOdbc.class实现 本地API Java驱动程序 这种类型的驱动程序把客户机API上的JDBC调用利用JNI(Java Native INterface)转换为本地数据库(如Oracle、Sybase、Informix、DB2或其它DBMS)的API调用。 类型2通常比类型1的速度要快,网络协议Java驱动程序: 这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。 这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。 数据库协议Java驱动程序: 这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。 这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。 第3类和第4类驱动程序将成为JDBC访问数据库的首选方法。第1类和第2类驱动程序在直接的纯Java驱动程序还没有上市前会作为过渡方案来使用。,5.3.3 JDBC的接口,JDBC 的实现类在java.sql包中,需要在程序中通过import语句引入。JDBC的接口分为两个层次: 面向程序开发人员的JDBC API 底层的JDBC Driver API JDBC Driver API 每个数据库JDBC驱动必须提供一个响应的驱动类。它由java.sql.Driver派生。大部分JDBC驱动只需要完成这些JDBC API所定义的抽象类就可以了。 所有的JDBC驱动必须提供对java.sql.Connection、java.slq.Statement、java.sql.PreparedStatement和java.sql.ResultSet的实现。,JDBC API: 被描述为一组抽象的Java接口,通过JDBC API,应用程序可以对数据库进行打开连接,执行SQL语句并且处理结果。 JDBC API中最重要的接口是: Java.sql.DriverManager:处理驱动程序的调入,并且对产生的新的数据库连接提供支持。 Java.sql.Connection:代表对特定数据库的连接。 Java.sql.Statement:代表一个特定的容器,来对一个特定的数据库执行SQL语句。其中java.sql.Statement又有两个子类 Java.sql.PreparedStatement:用于执行预编译的SQL语句 Java.sql.CallableStatement:用于执行对一个数据库内嵌过程的调用 Java.sql.ResultSet:控制对一个特定语句的数据的存取。,JDBC类图,5.3.4 JDBC访问数据库的模式,JDBC既支持两层模型,也支持三层模型。 Java Applet 最初的JDBC应用是Java Applet。它的实现方式是通过Web浏览器把应用下载到客户端运行,在客户端直接访问数据库。 其工作过程是:当Web浏览器从服务器上下载了包含有Java Applet的HTML页面时,如其中的Java Applet调用了JDBC,则浏览器运行的JavaApplet直接与指定的数据库建立连接,并向其提交SQL语句,Applet从数据库接受返回的结果并进行处理,将最后结果显示在浏览器上。 在客户机上运行Java Applet通过JDBC技术可以绕过Web服务器直接和数据库服务器连接,并直接把带有结果的HTML页返回客户机浏览器。,Java Serlets 与Java Applet不同,Java Servlets是运行于Web服务器端的程序,能够象CGI脚本一样扩展Web服务器功能。它在初始化时装入Web服务器的存储空间,并成为服务器的一个组成部分。 其工作过程是:当浏览器向服务器发出请求时,服务器将该请求传递给一个Servlet,该Servlet通过JDBC向数据库发出SQL请求并构造响应结果,然后通过服务器将结果传递回浏览器。 使用Java Servlets虽然可以完全实现通过Web访问数据库。但是Servlet生成网页的方法是在Java类中嵌入HTML标签和表述代码。这就意味着改变表述代码需要修改和重新编译Servlets源文件。因为设计HTML页面的设计人员可能与编写Servlets代码的开发人员不是同一个人,更新基于Servlets的Web应用程序就成了一件非常棘手的事情。,Java Server Page,即JSP JSP是Java Servlets的一个扩展,具有Servlets的所有优势。不同的是它将功能实现和网页设计的功能分开了。 JSP是Sun公司倡导的一种动态网页技术标准,是一种在服务器端编译执行的Web数据库系统应用程序编程语言,其脚本语言是Java,通过在HTML文件中加人Java程序片段和JSP标记构成JSP网页。 JSP技术可以让各公司采用各类Web服务器、应用服务器、浏览器和开发工具等快速创建Web网页。,5.3.5 JDBC访问数据库的方法,DriverManager,Driver,Connection,Statement,ResultSet,JDBC 类的使用,使用JDBC的第一步是安装驱动程序。大多数数据库都有JDBC驱动程序,常用的JDBC驱动程序如图所示。,连接数据库前先要加载驱动程序 import java.sql.* Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); Class.forName(“jdbc.driver_class_name”); 常见的有: com.microsoft.jdbc.sqlserver.SQLServerDriver org.gjt.mm.mysql.Driver Oracle.jdbc.driver.OracleDriver,建立与数据库之间的连接,也就是创建一个Connection的实例。 DriverManager类的getConnection()方法将建立数据库的连接: public static Connection getConnection(String url, String user, String password) throws SQLException 在程序的最后,应该关闭Connection对象: public void close() throws SQLException 不同的驱动有不同的URL写法,如SQL Server下的URL: jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=xx,使用Connection接口的方法 public void commit() throws SQLException public Statement createStatement() throws SQLException public boolean getAutoCommit() throws SQLException public CallableStatement prepareCall(String sql) throws SQLException,Statement对象用于将SQL语句发送到数据库中。 存在3种Statement对象: Statement PreparedStatement(从Statement继承而来) CallableStatement(从PreparedStatement继承而来),Statement接口提供了两种执行SQL语句的常用方法: public ResultSet executeQuery(String sql) throws SQLException 用于产生单个ResultSet的语句,例如SELECT语句。 public int executeUpdate(String sql) throws SQLException 用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,例如CREATE TABLE和DROP TABLE。该方法返回一个整数,指示受影响的行数。,ResultSet包含符合SQL语句执行结果所有行,并且它通过一套get方法提供了对这些行中数据的访问, 常用的get方法有: int getInt(int columnIndex),取得当前行中第columnIndex列的整数的值。 int getInt(String columnName),取得当前行中列名为columnName的整数的值。 其他方法: getDate(int columnIndex) getDate(String columnName) getString(int columnIndex) ,getString(String columnName) ResultSet维护指向其当前数据行的光标,让光标向下移动一行的方法是: public boolean next() throws SQLException,利用ResultSet对象在建立时,记录指针指向第一条记录之前,结合ResultSet对象提供的next方法,在while循环中移动记录指针,向下逐条地将数据库中的记录依次获取,在移动到记录的最后一条,由next方法返回值false来结束循环。 语法结构: while(rs.next() rs.getXXX(“字段名称”); ,结果集类型有3种: ResultSet.TYPE_FORWORD_ONLY:指定ResultSet对象是不可滚动,这是默认值。 ResultSet.TYPE_SCOLL_INSENSITIVE:指定ResultSet对象是可滚动的,但是对数据库中修改不敏感。 ResultSet.TYPE_SCOLL_SENSITIVE:指定ResultSet对象是可滚动的,而且对数据库的修改敏感。,总结:JDBC访问数据库基本方法,Class.forName(“JDBC驱动程序“);,Connection conn=DriverManager.getConnection(“相应JDBC驱动程序的连接串);,Statement stmt=conn.createStatement();,ResultSet rs=stmt.executeQuery(“DQL语句“);/如果是数据查询,stmt.executeUpdate(“DML语句“);/如果是数据操作,第五章 数据库访问接口,5.1 概述 5.2 ODBC与DAO对象 5.3 JDBC原理与应用 5.4 OLE DB和ADO 5.5 数据库中间件,5.4 OLE DB和ADO,5.4.1 概述 5.4.2 OLE DB 5.4.3 ADO,5.4.1 概述,随着网络技术和数据库技术的不断发展,需要将不同形式的数据进行集成。 传统的方法:将数据全移植到DBMS中处理。 但是这种间接访问方式数据更新不及时,空间资源冗余,访问效率低下。 微软公司推出UDA( Universal Data Access,统一数据访问技术)较好的解决了这个问题。为关系型或非关系型数据源提供了统一的,独立于开发工具和开发语言的接口。,UDA通过Microsoft Data Access Components(MDAC)来实现,而MDAC则包括ADO、Open Database Connectivity(ODBC)与OLE DB。 其中,OLE DB被微软公司归类为系统级的接口,定义了一套COM接口,提供从关联数据库及文件系统访问数据的能力,设计用来给系统级的程序员使用。它虽然灵活、功能强大,但仍属于较低级的接口,并且对程序员的要求较高,需要较高水平的知识。 ADO是在OLE DB之上的一个层面,被用来沟通这个低级接口与数据库,简化并实现OLE DB的强大功能,它是为应用程序员设计的。 ODBC为了向后兼容也包含在MDAC中,但ODBC有被OLE DB替代的趋势。,ADO在访问数据存储体时的层次关系图,ADO(Active Data Objects)是微软公司推出的一个功能强大的数据库应用编程接口,它的主要功能是用于应用程序与OLE DB兼容的数据源的连接。 应用程序可以通过ADO实现对各种类型数据库的连接,对数据的查询、修改、更新等。 因而,通过ADO存取数据已经成为流行的选择。,5.4.2 OLE DB,OLE DB:数据库链接和嵌入对象(Object Linking and Embedding DataBase)。是微软提出的基于COM思想且面向对象的一种技术标准,目的是提供一种统一的数据访问接口访问各种数据源, 这里所说的“数据”除了标准的关系型数据库中的数据之外,还包括其他形式的数据。 OLE DB标准的核心内容就是要求对以上这些各种各样的数据存储(Data Store)都提供一种相同的访问接口,使得数据的使用者(应用程序)可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型。,与ODBC API一样,OLE DB 也属于低层的数据库编程接口,OLE DB结合了ODBC对关系型数据库的操作功能,并进行了扩展,可以访问非关系型数据库源。 OLE DB对ODBC进行了两个方面的扩展: 一是提供了一个数据库编程的OLE接口,即COM; 二是提供了一个可用于关系型和非关系型数据源的接口。 OLE DB标准的具体实现是通过一组C+ API 函数, 就像ODBC 标准中的ODBC API 一样,,利用OLE DB进行软件开发应该包括两类软件:OLE DB客户程序(Consumer)和OLE DB供应程序(Provider) OLE DB客户程序是使用OLE DB接口的应用程序, 例如,采用C+编写的使用OLE DB连接数据库服务器的所有应用程序都是OLE DB客户程序。 OLE DB供应程序是实现OLE DB接口并实际与数据库服务器通信的DLL。 在功能上,OLE DB同ODBC驱动程序相同,不过OLE DB实现的是COM接口,而不是API接口。,5.4.3 ADO,ADO(ActiveX Data Object,ActiveX数据对象)是微软于1996年冬推出的一种面向对象的、基于COM思想的数据库访问接口。 为了使流行的各种编程语言都可以编写符合OLE DB标准的应用程序,微软在OLE DB API之上,提供了一种面向对象、与语言无关的应用编程接口,这就是ActiveX Data Objects,简称ADO。 实质上,ADO就是将OLE DB的面向C+的复杂接口封装起来,提供了便于操作的接口。还可以说ADO其实只是一个应用程序层次的界面,它用OLE DB来与数据库通信,ADO为OLEDB提供高层应用API函数。 ADO是ASP内置的服务器组件,ADO同OLE DB、数据库应用以及数据源之间的关系,ADO是DAO后继产品,它扩展了DAO和RDO所使用的对象模型,因为它包含更少的对象,更多的属性、方法(和参数)以及事件。 ADO提供了一种数据库编程对象模型,类似于DAO的对象模型,但比DAO有更高的灵活性。ADO简化了OLE DB,属于高层的数据库接口。另外同OLE DB相比,能够使用ADO的编程语言更多。 在使用上一般具有以下两种层次关系: 应用程序 - ADO - OLE DB - ODBC - 数据源 应用程序 - ADO - OLE DB - 数据源。,ADO的对象层次图,ADO技术是通过ADO对象的属性、方法来完成相应的数据库访问的。ADO共有以下7个独立对象类。 Connection:连接对象,表示与数据源的连接关系 Command:命令对象,用于定义一些特定的命令语法,以执行相应的动作 RecordSet:记录集对象,用于表示来自数据库表或命令执行结果的记录 Property:属性对象,用于描述对象的属性,每个ADO对象都有一组惟一的属性来描述或控制对象的行为 Error:错误对象,用于描述Connection对象在连接数据库时发生的错误 Field:域(字段)对象,用来表示RecordSet对象的字段,一个记录行包含一个或多个域(字段) Parameter:参数对象,用来描述Command对象的命令参数,是命令所需要的变量部分,ADO实际上是OLE DB的应用层接口,可以处理各种OLE DB支持的数据源。 在ADO模型中,主体对象只有三个:Connection、Command和Recordset。,通常情况下,一个基于ADO的数据库应用使用如下过程操作数据源里的数据: (1) 创建一个Connection 对象。定义用于连接的字符串信息,包括数据源名称、用户ID、口令、连接超时、缺省数据库以及光标的位置。一个Connection 对象代表了同数据源的一次会话。可以通过Connection 对象控制事务,即执行BeginTrans、CommitTrans和RollbackTrans方法。 (2) 打开数据源,建立同数据源的连接。 (3) 执行一个SQL命令。一旦连接成功,就可以运行查询了。可以以异步方式运行查询,也可以异步地处理查询结果,ADO会通知提供者后台提供数据。这样可以让应用程序继续处理其它事情而不必等待。 (4) 使用结果集。完成了查询以后,结果集就可以被应用程序使用了。在不同的光标类型下,可以在客户端或者服务器端浏览和修改行数据。 (5) 终止连接。当完成了所有数据操作后,可以销毁这个同数据源的连接。,用Connection对象连接数据库,Connection对象的常用属性和方法 Connection对象的常用属性: Mode:用于设置数据的可用权限,其属性值是系统定义的一些常量,只能在关闭Connection对象时设置。 State:指明Connection对象的当前状态, 包括关闭、打开、正在连接、正在执 行命令等。 ConnectionTimeout:设置对象建立连接操作失败时的等待时间。 DefaultDatabase:设置连接数据源的默认数据库。 ConnectionString:设置连接数据源的一些信息,Connection对象的常用方法: Open:用于建立到数据源的物理连接。 Execute:用于执行指定的查询、SQL语句、存储过程或特定的文本。 Cancel:用于取消用异步方式执行的ExecuteOpen方法的调用。 Close:用于关闭一个连接。在对Connection对象操作结束时,使用Close方法释放所有与之关联的系统资源,打开和关闭数据库连接,打开Connection对象,打开Connection对象的Open方法的语法格式如下: Open (ConnectionString, UserID, Password , Options ) 关闭Connection对象,关闭Connection对象的Close方法的语法格式如下: 对象实例名.Close,通过Connection对象执行SQL语句,打开Connection对象后,可以通过对象的Execute方法实现SQL语句的执行过程。 Execute方法的语法格式如下: Execute (CommandText , RecordsAffected , Option),Connection对象的事务处理,本例是进行事务处理的一段代码 ,用Command对象执行数据库操作,Command对象的常用属性和方法 执行SQL语句可以用打开的Connection对象,也可以用ADO的Command(命令)对象达到同样的目的。Command对象的常用属性和方法如下: ActiveConnection属性:指定与Command对象关联的已打开 的连接对象。 Name属性:指定Command对象的名字。 CommandText属性:定义一个可执行的命令串。 CommandType属性 :指定命令的类型。 Execute方法:执行命令,用Command对象执行SQL语句,用Command对象的Execute方法从sales表中检索出所有记录。源程序如下: ,用Command对象调用存储过程,在Web数据库程序设计中使用SQL存储过程有下列好处: 执行SQL存储过程比执行SQL命令快得多。当一个SQL语句包含在存储过程中时,服务器不必每次执行它时都要分析和编译它。 在多个网页中可以调用同一个存储过程,使站点易于维护。 一个存储过程可以包含多个SQL语句,这意味着可用存储过程建立复杂的查询。 存储过程可以接收和返回参数,这是实现复杂数据库访问功能的必要基础。,存储过程的调用形式 ,存储过程的调用也是一个Command对象的执行过程 实现对存储过程HitCount的调用。源程序如下: ,用Parameter对象实现存储过程的参数传递,Parameter对象代表基于参数化查询或与存储过程的Command对象相关联的输入、输出参数及存储过程的返回值。 用Command对象的CreateParameter方法可以建立一个参数对象,其语法格式如下: CreateParameter( Name,Type,Direction,Size,Value),用RecordSet对象控制数据,RecordSet对象可以实现以下功能: 指定可以检查的记录。 移动记录。 添加、更改和删除记录。 通过更改记录更新数据源。 管理RecordSet的总体状态,RecordSet对象的创建和数据读取,RecordSet对象的创建 使用Server.CreateObject(“ADODB. RecordSet”)创建RecordSet对象,然后通过打开RecordSet对象创建一个与某个数据库表相关联的RecordSet对象实例 可以采用Connection和Command对象的Execute方法,当用Execute方法从一个数据库返回查询结果时,将自动创建一个RecordSet对象,RecordSet对象数据的读取 在Web页面上显示表sales的所有记录数据,读取字段值时利用字段顺序号。源程序如下 Show Table sales ,记录集记录间的移动方法和记录集游标,移动方法包括: MoveNumRecords :在记录集中向前或向后移动指定条记录 MoveFirst:移动至记录集中的第一条记录 MoveLast:移动至记录集中的最后一条记录 MovePrevious:移动至当前记录的上一条记录 MoveNext:移动至当前记录的下一条记录,游标的类型有以下4种 : adOpenFowardOnly: 前向游标,只能在记录集中向前移 动。 adOpenKeyset:可在记录集中向前或向后移动。 若 另一用户删除或改变一条记录,记录集将反映这种变化,但若增加一条新记录,新记录不会出现在记录集中。 adOpenDynamic:可在记录集中向前或向后移动。 他用户造成的任何改变都会动态反映在记录集中。 adOpenStatic:可在记录集中向前或向后移动。不在记录集中反映其他用户对记录集造 成的任何改变,例:在Web页中列出数据库表sales的GoodsName域,要求显示顺序从最后一条记录开始直至第一条记录为止 BackWard % Set Conn=Server.CreateObject (“ADODB.Connection“) Set RS=Server.CreateObject (“ADODB.RecordSet“) Conn.Open “MyData“ 打开记录集时,将指定游标的类型为adOpenStatic,可在记录集中前向或后向移动 RS.Open “SELECT * FROM sales“,Conn,adOpenstatic,记录集记录的修改和记录锁定,使用RecordSet对象的一组方法对记录集中的记录进行增、删、改操作 AddNew Fields,Values方法 Delete AffectRecords方法 Update Fields,Values方法 CancelUpdate方法 UpdateBatch方法 CancelBatch方法,例, 在数据库表sales中插入一条新记录 Insert a Record % Set Conn=Server.CreateObject (“ ADODB.Conne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家庭护老技能培训创新创业项目商业计划书
- 龙岩安全员c证考试及答案
- 2025文具用品供货合同范本
- 2025年版合同范本:商铺租赁合同
- 2025年文化娱乐活动合同
- 2025年新疆地区农业技术推广合同协议
- 2025房产交易转让合同
- 2025农村厂房租赁合同范本
- 2025常用的物流仓库租赁合同范本
- 2025年乡村旅游项目投资风险合同协议
- 银行行测考试试题及答案
- 天津市建华中学2025-2025学年七年级上学期期末考试数学试卷
- 《建筑电气安装》课件
- 2025至2030中国氨基酸市场行情监测与发展前景研究报告
- 2025-2030全球及中国自动制动系统行业市场现状供需分析及投资评估规划分析研究报告
- 初中英语仁爱版单词表(按单元顺序)(七至九年级全6册)
- 《山东省房屋市政施工安全监督要点》及《安全监督“二十要”》2025
- 第九章《静电场及其应用》单元同步测试卷-2021-2022学年高二上学期物理人教版必修第三册
- 手术室急危重患者抢救与配合
- 2024年中小学学校传染病疫情及突发公共卫生事件报告制度
- 2025年湖南环境生物职业技术学院单招职业技能考试题库带答案
评论
0/150
提交评论