《Oracle9i数据库应用程序的开发.ppt》由会员分享,可在线阅读,更多相关《Oracle9i数据库应用程序的开发.ppt(50页珍藏版)》请在三一办公上搜索。
1、大型数据库概论Introduction of Large Database第10章 Oracle9i数据库应用程序的开发(1),学习目标1、理解VC+开发数据库应用程序的特点及各种技术。2、掌握VC+开发数据库应用程序前的准备工作。3、掌握使用MFC ODBC类开发Oracle9i数据库应用。,第10章 Oracle9i数据库应用程序的开发 VC+是Windows平台上开发32位应用程序强有力的前端工具,是Microsoft公司技术精华的主流产品。其功能强大,尤其在数据库应用程序开发方面提供了多种技术,开发的数据库应用程序具有简单、灵活、访问速度快、扩展性好、可访问不同类型的数据源等优势。本章
2、将结合学生基本信息和综合信息两个管理系统的开发实例,重点介绍使用VC+的MFC ODBC类和ADO技术开发Oracle9i数据库应用程序的具体技术。10.1 VC+开发数据库应用程序概述10.1.1 VC+简介 VC+由一组软件包构成,包含了各种必需的组件工具,如编辑器、编译器、链接器、调试器等,实质上提供了一个Windows平台上方便开发C/C+程序的可视化环境,它将各种工具组合起来,通过窗口、对话框、菜单、工具栏、快捷键及宏等构成了一个集成环境,程序员可以方便快捷地进行开发。VC+的集成环境如图10.1所示。,图10.1 VC+的集成环境,VC+为了方便程序的开发,提供了许多的服务:n 创
3、建和维护源程序文件的文本编辑器。n设计对话框、工具栏等界面组件的资源编辑器。n开发进程(如源文件、工程、资源等)的观察窗口。n提供了创建不同类型的Windows应用程序(如标准应用程序、动态链接库、Win32应用程序、ActiveX控件等)的专门向导(AppWizard)。n创建和维护各种类的助手-类向导ClassWizard。n优秀的调试器及可视化表示。n内置的MFC帮助。MFC(Microsoft Foundation Class,微软基础类库)是Microsoft公司为Windows程序员提供的一个面向对象的Windows编程接口。,10.1.2 VC+开发数据库应用程序的特点 n简单:
4、VC+提供了MFC类库、ATL模板类以及AppWizard、ClassWizard等一系列的向导工具用于帮助用户快速建立应用程序,大大简化了应用程序的设计。使用这些工具,可以使用户编写较少的代码或不需要编写代码就可以开发一个数据库应用程序。n灵活:VC+提供的集成环境可以使用户根据自己的需要设计应用程序的界面和功能,用户可以结合应用程序的特点自由选择VC+提供的丰富类库和方法。n访问速度快:VC+提供了基于COM接口的OLE和ADO技术,直接对数据库的驱动程序进行访问,访问数据库快。n扩展性好:VC+提供了OLE和ActiveX技术,使用户可以利用VC+提供的各种组件、控件及第三方提供的组件来
5、创建自己的应用程序,从而实现应用程序的组件化,保证应用程序的扩展性。n可访问不同类型的数据源:使用VC+提供的OLE技术,用户不仅可以访问关系型数据库,还可以访问非关系型数据库。,10.1.3 VC+开发数据库应用程序的各种技术 n ODBC API ODBC(Open DataBase Connectivity,开放数据库互连)是数据库访问的标准接口。使用这一标准接口,可以使用户不需关心具体DBMS的细节,只需有相应类型的ODBC驱动程序就可以实现对数据库的访问。ODBC建立在客户机/服务器体系结构之上,包含以下四个部分:u应用程序(Application):通过调用ODBC函数完成对数据库
6、的访问操作。u驱动程序管理器(Driver Manager):负责对ODBC的驱动程序和数据源进行管理。u驱动程序(Driver):真正实现ODBC函数调用和访问数据库的动态链接函数库,对不同类型的数据库有不同的驱动程序。u数据源(Data Source):通过ODBC连接的数据库。,使用ODBC API(ODBC Application Program Interface)开发数据库应用程序的一般步骤是:u 分配ODBC环境,使一些内部结构初始化。u 为将访问的每个数据源分配一个连接句柄。u 将连接句柄与数据库连接,使用SQL语句进行操作。u 取回SQL语句操作的结果,取消与数据库的连接。u
7、 释放ODBC环境。ODBC API的特点是功能强大,提供了异步操作、事务处理等高级功能,但相应的编程复杂、工作量大,不适合初学者使用。,nMFC ODBC类 直接使用ODBC API开发数据库应用程序需要编写大量的代码,所以VC+提供了已封装ODBC API的MFC ODBC类,使用户从ODBC API复杂的编程中解脱出来,能够非常简便地开发数据库应用程序。MFC类库中主要的MFC ODBC类有:uCdatabase(数据库类):提供了对数据源的连接,可以对数据源进行操作。uCrecordSet(记录集类):以控制的形式显示数据库记录,是直接连到一个CRecordSet对象的表视图。uCre
8、cordView(可视记录集类):提供了从数据源中提取的记录集,通常使用动态行集(dynasets)和快照集(snapshots)两种形式。动态行集能保持与数据的更改同步,快照集则是数据的一个静态视图。由于MFC ODBC类功能丰富,开发简便,易于掌握,尤其适合于初学者。,n DAO DAO(Data Access Object)提供了一种通过程序代码创建和操作数据库的机制,专用于访问Microsoft Jet数据库文件(*.mdb)。MFC类库中主要的DAO类有:uCdaoDatabase(数据库类):代表一个到数据源的连接,通过它可以操作数据源。uCdaoRecordSet(记录集类):用
9、来选择记录集并操作。uCdaoRecordView(可视记录集类):在空间中显示数据库记录的视图。DAO的应用范围相对固定,只支持Microsoft Jet数据库,不能用来开发Oracle9i数据库应用程序。,nOLE DB 基于COM(Component Object Model)接口的OLE DB(Object Linked and Embedded Database)是VC+访问数据库的新技术,使用它既可以访问关系型数据库,也可以访问非关系型数据库。OLE DB框架中主要基本类有:uData Provider(数据提供程序类):拥有自己的数据并以表格形式显示数据的应用程序。uConsum
10、ers(使用者类):对存储在数据提供程序中的数据进行控制的应用程序。用户应用程序归为使用者类。uService Provider(服务提供程序类):是数据提供程序和使用者的组合。它首先通过使用者接口访问存储在数据提供程序中的数据,然后通过打开数据提供程序接口使得数据对使用者有效。uOLE DB与ODBC API一样也属于数据库访问中的底层接口,使用OLE DB开发数据库应用程序需要编写大量的代码。,n ADO:(ActiveX Data Object)是基于OLE DB的访问技术,继承了OLE DB可以访问关系数据库和非关系数据库的优点,并且对OLE DB的接口作了封装,属于数据库访问的高层接
11、口,使数据库应用程序的开发得到了简化。表10.1对以上各种技术进行了比较。本章主要介绍使用MFC ODBC类和ADO技术开发数据库应用程序,并辅以开发实例进行详细说明。,10.2 VC+开发数据库应用程序前的准备工作 数据库应用程序开发的前提是首先创建数据库和数据库表,一切的开发工作都是围绕着数据库和数据库表的操作进行的。为能够使用VC+提供的MFC ODBC类数据库访问技术,在成功创建数据库和数据库表之后,还需要配置ODBC数据源。10.2.1 数据库和数据库表的创建 本章所介绍的数据库应用程序开发实例学生基本信息管理系统和学生综合信息管理系统,其目标分别是能够对学生基本信息和学生综合信息(
12、包括选修课程信息和选修成绩信息)进行查询、增加、删除和修改操作。实例所访问的数据库是第5章所创建的学生数据库XSCJ,涉及到该数据库的三张表分别是用户ZHS所拥有的学生表STUDENT、课程表COURSE和成绩表SCORE。,10.2.2 数据源的配置:数据源实质上代表着一个特定的数据库,ODBC对不同数据库的使用都是通过对相应数据源进行操作而实现的。使用操作系统(本例为Windows XP)中的ODBC数据源管理器可以进行数据源的配置。以下是数据源STUDENTDB(代表着XSCJ数据库)的创建过程。单击“开始”“控制面板”“性能和维护”“管理工具”“数据源(ODBC)”,即可弹出如图10.
13、2所示的“ODBC数据源管理器”对话框。,图10.2“ODBC数据源管理器”对话框,在“用户DSN”选项卡中,单击“添加”按钮,弹出如图10.3所示的“创建新数据源”对话框。,图10.3“创建新数据源”对话框,在“创建新数据源”对话框中选择“Oracle in Orahome92”作为安装数据源的驱动程序,单击“完成”按钮,弹出如图10.4所示的“Oracle ODBC Driver Configuration”对话框。,图10.4“ODBC数据源管理器”对话框,在“Oracle ODBC Driver Configuration”对话框中输入相关选项后,单击“Test Connection”
14、按钮,弹出如图10.5所示的“Oracle ODBC Driver Connect”对话框。在“Oracle ODBC Driver Connect”对话框中输入用户ZHS的口令后,单击“OK”按钮,弹出如图10.6所示的测试连接数据源成功的消息框。,图10.5,图10.6,在图10.4所示的“Oracle ODBC Driver Configuration”对话框中单击“OK”按钮,将完成数据源的配置。此时可以发现在ODBC数据源管理器中出现了“STUDENTDB”数据源,如图10.7所示。数据源成功配置后,就可以着手数据库应用程序的构建了。,图10.7 数据源STUDENTDB配置完成后的
15、的ODBC数据源管理器,10.3 使用MFC ODBC类开发Oracle9i数据库应用程序 使用MFC ODBC类开发Oracle9i数据库应用程序(以学生基本信息管理系统作为实例)的步骤是:10.3.1 创建应用程序框架 打开VC+,选择“文件”“新建”菜单项,建立一个新的工程。在“工程”选项卡中选择“MFC AppWizard(exe)”选项,在“工程”文本框中输入“学生基本信息管理系统”,在“位置”文本框中选择“D:Microsoft Visual StudioMyProjects”,其它设置不变。单击“确定”按钮,在“MFC AppWizard-step 1”对话框中选择应用程序类型为
16、“单个文档”,其它设置不变。单击“下一个”按钮,在“MFC AppWizard-step 2 of 6”对话框中选中“查看数据库不使用文件支持”。此时“Data Source”按钮被激活,如图10.8所示。,图10.8“MFC AppWizard-step 2 of 6”对话框,单击“Data Source”按钮,出现“Database Options”对话框,在ODBC下拉列表框中选择已建好的数据源STUDENTDB,如图10.9所示。,图10.9 选择数据源STUDENTDB,单击“OK”按钮,出现“Oracle ODBC Driver Connect”对话框,输入用户ZHS的口令后,单击
17、“OK”按钮,出现“Select Database Tables”对话框,从列表中选择“ZHS.STUDENT”,如图10.10所示。,图10.10 选择数据表ZHS.STUDENT,单击“OK”按钮,返回“MFC AppWizard-step 2 of 6对话框”。单击“完成”按钮,弹出“新建工程信息”窗口后,单击“确定”按钮,出现如图10.11所示的应用程序框架。,图10.11 应用程序框架,至此,应用程序框架已经创建,已为该工程提供了一个数据源,框架中只有一个对话框,要完成其它功能,尚需后续的制作。10.3.2 应用程序框架的资源分析 一般而言,应用向导为用户提供了一个应用程序的框架,所
18、谓框架就是一个对话框(该对话框一般就是应用程序的主界面)和应用程序相关的结构体系,如应用程序的主界面、图标、菜单、状态条、版本说明等,它们是Windows应用程序的主要构成要素,这些构件均可以由向导自动生成。但作为框架,目前尚不会执行任何功能。对于数据库的数据处理必须加入一定的控件,并与数据源进行绑定,同时还要面向框架中的一些对象编程,才能执行相关的数据操作。为此,将对框架中的资源进行剖析。在VC+创建应用程序的集成环境中,出现了一个工作区、一个编译器窗口和一个视图管理器(也称对象管理器或对象监视器),如图10.11所示。资源以类并以文档的形式保存在视图管理器中,用户可以根据需要打开并显示相应
19、资源。下面对本实例框架中的资源作一介绍。,Accelerator:加速键资源,集中了整个应用程序框架中全部操作的加速键定义。双击Accelerator,会出现全部加速键的定义,如图10.12所示。图10.12 应用程序框架中的加速键定义 加速键是由向导预先定义的,用户可以根据需要对每个加速键进行重新设置。,Dialog:对话框资源,基于文档的应用程序(本例是基于单文档)向导预先定义了两个对话框:nAbout窗体:是对应用程序的说明,也是Windows应用程序制作的规范。双击About,用户可以根据需要对其进行重新设置,如图10.13所示。图10.13 About窗体 nIDD_MY_FORM:
20、一般是应用程序的主窗体,是其它对象的容器,用户可以根据需要将其它对象加载到其中,加载前一般先删除该对话框中提示文本框“TODO:在这个对话框里设置表格控制”。,Icon:按钮图标资源,用来对对话框进行修饰或作为标志。向导自动定义了两个图标资源IDR_MAINFRAME和IDR_MYTYPE,用户可以根据需要对它们进行编辑。Menu:菜单资源。向导自动定义了一个菜单资源IDR_MAINFRAME,用户可以根据需要对其进行编辑。String Table:字符串数据表资源,记录了应用程序全部资源的定义和功能。Toolbar:工具条资源。向导为应用程序的主窗体自动定义了的一个工具条资源IDR_MAIN
21、FRAME,用户可以根据需要对其进行编辑。Version:应用程序版本信息。,10.3.3 应用程序框架的文件分析 应用程序是文档的集合,框架一经建立和编译,就会生成一些派生的文件。一个VC+应用程序的文件主要包括源文件、头文件、资源文件、说明文件等。下面对本实例框架中主要的文件作一介绍。MainFrm.cpp:主框架实现文件,用来说明主框架中的类、头文件声明及主框架的实现过程。StdAfx.cpp:包括预定义头文件等的标准文件。学生基本信息管理系统.cpp:用于定义类的行为。学生基本信息管理系统Doc.cpp:用于记录类。学生基本信息管理系统Set.cpp:用于记录关于类的设置、数据环境及数
22、据连接等的设置过程。学生基本信息管理系统View.cpp:可以查看类及其实现过程,常常包括工程全部文件的执行过程。,10.3.4 制作应用程序的主窗体 主对话框的基本制作:向导已为应用程序生成一个对话框对象IDD_MY_FORM,它也是该种类型工程的主对话框,即作为工程运行的主界面。数据源也正是为该对话框而引入的(其它类型的工程未必如此)。主对话框的基本制作步骤是:n单击VC+主菜单中的“工具”“定制”菜单项,出现定制对话框,如图10.14所示。,图10.14“定制”对话框,n在“工具栏”选项卡中选中“Controls”选项,单击“关闭”按钮,则VC+的常用控件(如命令按钮、标签、文本框、组合
23、框、复选按钮、单选按钮、页框控件等)将出现在工作区中,如图10.15所示。图10.15 VC+的常用控件 如果常用控件已出现在工作区中,可以省略这两步。,n在主对话框IDD_MY_FORM中加入5个标签控件并分别编辑,编辑的方法是:右击欲编辑的标签控件,在快捷菜单中单击“属性”,弹出标签控件的属性设置对话框,如图10.16所示。图10.16“标签控件的属性设置”对话框 标签控件的属性可分为一般、风格和扩展三种,标题和资源索引号ID是其中最关键的属性。表10.2列出了5个标签控件的基本属性。,n在主对话框IDD_MY_FORM中加入5个编辑框控件并分别编辑,编辑的方法同标签控件。表10.3列出了
24、5个标签控件的基本属性。各标签及编辑框控件在主对话框中的布局如图10.17所示。,图10.17 各标签及编辑框控件在主对话框中的布局,编辑框控件与数据库表字段的绑定:在主对话框IDD_MY_FORM中加载编辑框控件后,应将各编辑框控件与数据源(STUDENTDB中的ZHS.STUDENT表,该数据源专为主对话框而引入)进行连接和数据绑定,具体方法是:n右击欲绑定的编辑框控件,在快捷菜单中单击“建立类向导”,弹出“MFC ClassWizard”对话框,选中“Member Variables”选项卡,在Class name中选择“CmySet”选项,如图10.18所示。,图10.18 全部字段的
25、成员变量,图中列出了表ZHS.STUDENT的所有字段名称,并为每一字段赋予了一个成员变量。VC+中一些资源是按照成员变量进行编译和识别的,用户可以对成员变量进行重新定义。方法是选中欲重新定义的成员变量,单击“Delete Variable”按钮,再单击“Add Variable”按钮,即可重新定义。本例默认。n在图10.18中,将Class name切换为“CMyView”,出现如图10.19所示的成员列表。,图10.19 成员列表,图中包含了全部编辑框控件的资源索引ID,下面将根据资源索引ID建立各编辑框控件与数据库表字段成员变量间的映射。n在图中选择“学号”编辑框控件的资源索引ID(ID
26、C_EDITSNO),单击“Add Variable”按钮,出现如图10.20所示的“Add Member Variable”对话框。图10.20“Add Member Variable”对话框 n从成员变量名中选择“m_pSet-m_SNO”,单击“OK”按钮,完成“学号”编辑框控件与“m_SNO”成员变量之间的映射。按同样方法建立其它编辑框控件与相应成员变量之间的映射。,n编译工程,得到如图10.21所示的应用程序初步运行效果。图10.21 应用程序的初步运行效果10.3.5 实现应用程序的增加、删除、修改与查询记录功能 前面的主窗体制作中利用编辑框控件实现了对数据的浏览,但未能实现对数据
27、的增加、删除、修改以及按条件查询等功能,本小节将完善应用程序的这些功能。主窗体的重新新布局,在主对话框IDD_MY_FORM中加入9个命令按钮控件并分别编辑,编辑的方法同标签控件。表10.4列出了9个命令按钮控件的基本属性。各命令按钮控件在主对话框中的布局如图10.22所示。,图10.22,增加新的对话框及创建类成员 查询记录时常常需要一个对话框,用于输入查询条件。为此,需在工程中增加一个对话框,步骤如下:n单击VC+主菜单中的“插入”“资源”菜单项,选择“Dialog”类型,单击“新建”按钮,将在工程的资源视图选项卡中增加了一个对话框资源IDD_DIALOG1,并弹出如图10.23所示的“D
28、ialog”对话框。右击该对话框,在快捷菜单中单击“属性”,输入其标题为“查询记录”。再将两个命令按钮的标题分别改为“确定”、“取消”。,图10.23 新对话框中的布局,n在该对话框中加入一个分组框控件,设置其标题为“请输入查询条件”,ID为“IDC_STATICQUERY”。在分组框内放入一个编辑框控件,设置其ID为“IDC_EDITQUERY”。n右击该对话框,在快捷菜单中单击“建立类向导”,弹出如图10.24所示的“Adding a Class”对话框。,图10.24“Adding a Class”对话框,n单击“OK”按钮,弹出如图10.25所示的“New Class”对话框,在“Na
29、me”中输入“CmyDlg1”。,图10.25“New Class”对话框,n单击“OK”按钮,出现如图10.26所示的“MFC ClassWizard”对话框,选中“Member Variables”选项卡,为刚加入的编辑框控件IDC_EDITQUERY添加成员变量m_query。“确定”和“取消”两个命令按钮是系统自动创建的,可以被识别,不需添加成员变量。,图10.26 添加编辑框控件IDC_EDITQUERY的成员变量m_query,n为新类加以声明:工程中的资源相互调用时需要在它们之间进行声明,否则将不可识别。由于在主对话框中将调用新增的对话框,因此需要在应用程序的主对话框视图文件(因
30、为本应用程序是基本单文档类型的,对于其它类型的工程应在相应文件中进行声明)中对新增对话框资源进行声明。方法是在视图管理器中选择“FileView”,双击“学生基本信息管理系统View.cpp”,在该文件的开始部分增加新类的声明,如下所示:#include stdafx.h#include 学生基本信息管理系统.h#include 学生基本信息管理系统Set.h#include 学生基本信息管理系统Doc.h#include 学生基本信息管理系统View.h/开始声明#include MyDlg1.h,/结束声明#ifdef _DEBUG#define new DEBUG_NEW#undef T
31、HIS_FILE static char THIS_FILE=_FILE_;#endif 编写各命令按钮的过程代码 n“第一条”命令按钮的过程代码 void CMyView:OnButtonfirst()/TODO:Add your control notification handler code here m_pSet-MoveFirst();UpdateData(FALSE);,n“下一条”命令按钮的过程代码 void CMyView:OnButtonnext()/TODO:Add your control notification handler code here m_pSet-Mo
32、veNext();if(m_pSet-IsEOF()MessageBox(已定位在最后一条记录!);m_pSet-MovePrev();UpdateData(FALSE);return;UpdateData(FALSE);,n“上一条”命令按钮的过程代码 void CMyView:OnButtonprev()/TODO:Add your control notification handler code here m_pSet-MovePrev();if(m_pSet-IsBOF()MessageBox(已定位在第一条记录!);m_pSet-MoveNext();UpdateData(FALS
33、E);return;UpdateData(FALSE);,n“最后一条”命令按钮的过程代码 void CMyView:OnButtonlast()/TODO:Add your control notification handler code here m_pSet-MoveLast();UpdateData(FALSE);n“增加”命令按钮的过程代码 void CMyView:OnButtonadd()/TODO:Add your control notification handler code here m_pSet-AddNew();UpdateData(FALSE);,n“删除”命令
34、按钮的过程代码 void CMyView:OnButtondelete()/TODO:Add your control notification handler code here m_pSet-Delete();m_pSet-MoveNext();if(m_pSet-IsEOF()m_pSet-MoveLast();if(m_pSet-IsBOF()m_pSet-SetFieldNull(NULL);UpdateData(FALSE);,n“修改”命令按钮的过程代码 void CMyView:OnButtonupdate()/TODO:Add your control notificatio
35、n handler code here m_pSet-Edit();n“确认更新”命令按钮的过程代码 void CMyView:OnButtonconfirm()/TODO:Add your control notification handler code here UpdateData();m_pSet-Update();m_pSet-Requery();,n“查询”命令按钮的过程代码 void CMyView:OnButtonquery()/TODO:Add your control notification handler code here CMyDlg1 MyDlg1;MyDlg1.DoModal();CString value;if(MyDlg1.DoModal()=IDOK)value=SNO=+MyDlg1.m_query+;m_pSet-m_strFilter=value;m_pSet-Requery();UpdateData(FALSE);return;,习题91.简述VC+开发数据库应用程序的特点与各种技术。2.什么是数据源?3.MFC类库中常用的MFC ODBC类有哪三种?,