360 likes | 518 Views
数据库原理与应用. 第八章 数据库应用开发. 第八章 数据库应用开发. 数据库设计过程 数据库应用系统结构 ODBC Java 和 JDBC 数据库与 WWW JSP 技术 Delphi. 数据库设计. 数据库设计 是应用系统开发过程中的一项重要任务,它的主要目标是根据应用系统的需求,构造合适的数据库模式,使程序能够高效、方便地处理数据 数据库设计的任务并不是一蹴而就的,其开发周期长、耗资大、风险高,必须把软件工程的基本原理和方法应用到数据库的设计和建设中来. 数据库设计的迭代过程. 概念、逻辑和物理模式设计. 与用户交流. 优化的方案. 评价设计的模式.
E N D
数据库原理与应用 第八章 数据库应用开发
第八章 数据库应用开发 • 数据库设计过程 • 数据库应用系统结构 • ODBC • Java和JDBC • 数据库与WWW • JSP技术 • Delphi 7.2
数据库设计 • 数据库设计是应用系统开发过程中的一项重要任务,它的主要目标是根据应用系统的需求,构造合适的数据库模式,使程序能够高效、方便地处理数据 • 数据库设计的任务并不是一蹴而就的,其开发周期长、耗资大、风险高,必须把软件工程的基本原理和方法应用到数据库的设计和建设中来 7.3
数据库设计的迭代过程 概念、逻辑和物理模式设计 与用户交流 优化的方案 评价设计的模式 7.4
数据库设计的五个阶段 • 需求分析就是综合分析多个应用系统的要求,它是数据库设计的起点,分析的结果是否准确将直接影响到后面各个阶段的设计 • 概念设计就是将需求分析得到的用户需求抽象为概念模型的过程,它是整个数据库设计的关键 • 为了能够用某一DBMS实现用户需求,需要在逻辑设计阶段将ER图转换成具体的数据库产品支持的数据模型,形成数据库逻辑模式 • 物理设计是为一个给定的逻辑模式选取一个最适合应用环境的物理模式的过程 • 数据库实施、运行和维护 7.5
各个阶段与各级模式的关系 应用A 应用B 应用C 1.需求分析 概念模式 2.概念设计 外模式 逻辑模式 外模式 3.逻辑设计 反馈 外模式 物理模式 4.物理设计 5.实施、运行和维护 7.6
Client/Server结构 • 可以区分与远程数据库相连的用户工作使用的客户端(client)和运行数据库系统的服务器(server) • 客户端(前台)负责与用户的交互,服务器(后台)负责数据的管理 • C/S结构的数据库应用系统相对于单层结构来说已经有了很大的进步,当后端服务器的环境发生变化时,客户端代码不需要任何变化,因此灵活性有一定的提高 • C/S结构的缺点 • 可伸缩性差 • 程序维护困难 • 代码重用性差 7.7
C/S结构示意图 用户 客户端程序 SQL 请求 数据返回 数据库服务器 7.8
Browser/Server结构 • 随着Internet/Intranet的技术和应用的发展,WWW服务成了主流服务,用户通过浏览器漫游网络。一种新的计算模式在20世纪90年代中期逐渐形成和发展,这种基于浏览器、WWW服务器和应用服务器的计算结构称为B/S结构 • 三层结构的应用更适合于大型应用和Web应用,分为表示层、逻辑层和数据层 • 表示层:即为用户界面 • 逻辑层:它实现了应用程序的主要业务功能 • 数据层:它负责数据的访问 7.9
三层的B/S结构 Web浏览器 Web服务器 表示层 逻辑层 应用服务器 数据库服务器 数据层 7.10
ODBC简介 • ODBC(Open DataBase Connectivity)是由Microsoft公司推出的数据库访问的标准接口 • ODBC为C语言提供了一组对数据库访问的标准API(Application Program Interface) • ODBC的API利用SQL来完成其大部分任务,也就是说ODBC是接收用户输入的标准SQL语句来实现同数据库的交互 • ODBC技术使得应用程序与DBMS之间在逻辑上可以分离,使开发的应用程序具有数据库无关性,即应用程序不必修改源代码就可以访问不同的DBMS,同时存取多个数据库中的数据 7.11
ODBC驱动程序 • 应用程序是通过ODBC驱动程序来访问数据库的。每一个支持ODBC的DBMS都必须提供一个供客户端应用程序连接的库 • ODBC驱动程序需要依据ODBC规范进行开发,由DBMS生产商提供,它们通常是一些DLL(Dynamic Linked Library)文件 • 为了进一步简化应用程序的开发,真正地实现应用程序对多个DBMS的同时访问,在ODBC体系结构中,应用程序仍然不是直接访问ODBC驱动程序的。在应用程序和ODBC驱动程序之间,还存在一个驱动管理器(driver manager),它负责在运行时搜索相应的驱动程序,并动态地装入 7.12
ODBC的4层体系结构 应用程序 ODBC API 驱动管理器 驱动程序 驱动程序 驱动程序 数据源 数据源 数据源 7.13
ODBC的一致性级别 • API一致性规定了驱动程序需要实现的ODBC函数,分别有三个级别:核心级、1级、2级,这三个级别的功能是逐步增强的 • SQL一致性规定了对SQL语句语法的要求,分别有三个级别:最小级SQL、核心级SQL和扩展级SQL,每一个后面的级别都建立在前一个较低级别上 7.14
ODBC应用开发 • ODBC句柄(handle)是在应用程序中使用的环境变量,用于和数据源进行连接 • ODBC接口定义了三种句柄类型: • 环境句柄:定义了一个ODBC环境,用于存储有效连接句柄及当前活动的连接句柄等信息,其数据类型是HENV。一个应用程序只能有一个环境句柄,一个环境句柄可以对应多个连接句柄 • 连接句柄:定义了一个数据源的连接,用于存储有关数据源连接的信息,其数据类型是HDBC。对应用程序的每一个连接都需要分配一个连接句柄,每个连接句柄可以对应多个与其相关的语句句柄 • 语句句柄:定义了一条SQL语句,其数据类型是HSTMT。应用程序必须在提交SQL语句之前申请一个语句句柄 7.15
三种句柄之间的关系 应用程序 环境句柄 连接句柄 连接句柄 连接句柄 语句句柄 语句句柄 语句句柄 7.16
ODBC函数介绍 • 分配环境句柄HENV henv;SQLAllocEnv(&henv); • 分配连接句柄HDBC hdbc;SQLAllocConnect(henv, &hdbc);说明:henv是一个已分配的环境句柄 • 用已分配的连接句柄连接数据源SQLConnect(hdbc,szDSN,cbDSN,szUID,cbUID,szAuthStr,cbAuthStr);说明:hdbc是一个已分配的连接句柄szDSN和cbDSN分别表示系统所要连接的数据源名称字符串及其长度szUID和cbUID分别表示连接数据源的用户名字符串及其长度szAuthStr和cbAuthStr分别表示连接数据源的权限字符串及其长度 7.17
ODBC函数介绍(续) • 分配语句句柄HSTMT hstmt;SQLAllocStmt(hdbc,&hstmt);说明:hdbc是一个已分配的连接句柄 • 直接执行SQL语句SQLExecDirect(hstmt, szSqlStr, cbSqlStr);说明:hstmt是一个有效的语句句柄szSqlStr和cbSqlStr分别表示将要执行的SQL语句的字符串及其长度例子:retcode=SQLExecDirect(hstmt, “delete from bookinfo where ID=1”, SQL_NTS);说明:删除bookinfo表中ID=1的记录。SQL_NTS是ODBC的一个常数,当字符串是以NULL结束时,可用它来表示字符串的长度 7.18
ODBC函数介绍(续) • 有准备地执行SQL语句,如果SQL语句需要执行几次,则采用有准备的执行更好,避免了SQL语句的多次分析。有准备的执行需要两个函数:SQLPrepare(hstmt, szSqlStr, cbSqlStr);说明:SQL语句准备函数,参数同SQLExecDirectSQLExecute(hstmt);说明:SQL语句执行函数 7.19
ODBC函数介绍(续) • 查询结果的获取,当执行一个select语句时,ODBC隐含地打开了一个游标(cursor)SQLFetch(hstmt);说明:把游标移到下一行,当查询语句执行后第一次调用时移到结果集的第一行SQLGetData(hstmt,icol,fCType,rgbValue,cbValueMax, pcbValue);说明:读取游标指向行的列值icol和fCType分别表示结果集的列号和类型rgbValue和cbValueMax是接收数据存储区的指针和最大长度pcbValue是返回参数,表示本次调用后实际接收到的数据的字节数 7.20
ODBC函数介绍(续) • 释放语句句柄SQLfreeStmt(hstmt, foption);说明:foption指定选项,一个选项是用SQL_DROP表示释放所有与该句柄相关的资源 • 断开数据源连接SQLDisconnect(hdbc); • 释放连接句柄SQLFreeConnect(hdbc); • 释放环境句柄SQLFreeEnv(henv); 7.21
ODBC编程的基本流程 1.ODBC初始化 SQLAllocEnv() SQLAllocConnect() SQLConnect() SQLAllocStmt() 2.执行SQL命令 SQLExecDirect() SQLPrepare() SQLExecute() 4.释放空间 SQLFreeStmt() SQLDisconnect() SQLFreeConnect() SQLFreeEnv() 3.获取结果数据 SQLFetch() SQLGetData() 7.22
Java语言简介 • Java是一种可以用来编写跨平台应用软件的面向对象的程序设计语言,由Sun公司James Gosling等人于20世纪90年代初开发的。Java语言伴随着Internet的迅猛发展而流行起来,逐渐成为重要的Internet编程语言 • Java编程语言的风格十分接近C++语言,Java继承了C++语言面向对象技术的核心。然而,Java舍弃了C++语言中容易引起错误的指针(以引用取代)、运算符重载、多重继承(以接口取代)等成分,增加了自动垃圾收集功能用于回收不再被引用的对象所占据的内存空间 • Java首先将源代码编译成字节码,然后依赖各种不同平台上的虚拟机(Virtual Machine, VM)来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性 • 由于是在Java虚拟机上解释执行,使得Java程序的运行效率较低。然而,在J2SE1.4.2版本发布之后,Java的性能有了大幅的提升 7.23
JDBC简介 • JDBC(Java DataBase Connectivity)是Sun公司在1996年推出的在Java语言中访问数据库的标准API,现在已经被大多数主流数据库所采用 • JDBC由一组用Java编写的类与接口构成,它扩充了Java语言访问数据库的能力,使得程序员可以用纯Java来编写数据库应用系统。与C语言和ODBC的结合相类似,Java与JDBC的结合使程序员可以只编写一次数据库应用程序,就能在各种数据库系统上运行,实现了应用程序的数据库无关性。 • JDBC API是一种基于SQL的Java接口,它与ODBC类似 • JDBC API位于JDK(Java Development Kit)中的java.sql包中(后来扩展的内容位于javax.sql包中), 7.24
JDBC驱动程序 • JDBC-ODBC桥:这种类型的驱动程序把所有JDBC的调用传递给ODBC,再让后者调用数据库本地驱动代码。通过ODBC,JDBC-ODBC桥驱动程序可以访问所有支持ODBC的关系型数据库 • 本地API驱动:这种类型的驱动程序通过客户端加载数据库厂商提供的本地代码库(C/C++等)来访问数据库,而在驱动程序中则采用了Java代码 • 网络协议驱动:这种类型的驱动给客户端提供了一个网络API,客户端上的JDBC驱动程序调用服务器上的中间件程序,后者再将其请求转化为对具体数据库的API调用 • 本地协议驱动:这种类型的驱动直接在客户端和数据库间通信 7.25
JDBC的类和接口 • DriverManager类:负责加载各种不同的JDBC驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection) • Driver接口:会将自身加载到DriverManager中去,处理相应的请求并返回相应的数据库连接。每个数据库的JDBC驱动程序都应该实现driver接口中的所有方法,通过driver接口,JDBC驱动程序与数据库建立连接关系 • Connection接口:用于与数据库连接,SQL语句的执行、事务处理都是在某个特定的Connection中进行的。一个成功的连接能够提供有关数据库中表的描述、所支持的SQL语句、存储过程等信息 • Statement接口:用来执行SQL语句,包括查询和更新,但主要是针对静态SQL语句和单次执行的 7.26
JDBC的类和接口(续) • PreparedStatement接口:用来执行包含动态参数的SQL语句,在数据库服务器端只需要编译一次,然后可以重复执行以提高效率 • CallableStatement接口:用来调用数据库中的存储过程 • ResultSet接口:提供访问查询结果集的方法。SQL查询语句执行后会返回一个结果集,可以用这个接口中的方法来获得查询结果 • ResultSetMetaData接口:有时并不知道所获得结果集的结构,这个接口提供了获取结果集中列的数目、类型等信息 • SQLException类:用来处理在数据库连接的建立和关闭、SQL语句的执行过程中发生的异常情况 7.27
JDBC应用开发的步骤 • 1. 注册一个driver • 注册driver就是加载相应的驱动程序 • 在JDBC中,通常有两种加载驱动程序的方式 • 将驱动程序添加到 java.lang.system 的属性 jdbc.drivers 中,这是一个由drivermanager类加载的驱动程序的列表,用冒号分隔 • 在程序中利用class.forname()方法加载指定的驱动程序 • 2. 建立一个到数据库的连接 • 与数据库建立连接的标准方法是调用方法DriverManager.getConnection(String url, String user, String password) 7.28
JDBC应用开发的步骤(续) • 3. 创建一个statement • 使用方法Connection.createStatement()得到一个Statement对象, 或者使用Connection.prepareStatement (String str)得到一个PreparedStatement对象 • 4. 执行SQL语句 • 通过Statement接口方法可以直接执行SQL语句,返回的结果集可以通过java.sql.ResultSet接口进行访问 • 5. 处理结果 • 结果集ResultSet对象保持了一个指向了当前行的指针,使用结果集ResultSet对象的方法获取数据 • 6. 关闭JDBC对象,按如下顺序关闭JDBC对象 • 关闭RecordSet • 关闭Statement和PreparedStatement • 最后关闭Connection 7.29
WWW简介 • Internet是目前世界上最大的计算机互联网络,同时也是一个全球性的信息服务网络,今天,它的意义已经远远超出了计算机网络的涵义 • WWW(World Wide Web)也称Web,是基于超文本(hypertext)方式的多媒体信息查询系统,通过超链接(hyperlink)的方式将Internet上分布在全世界不同地理位置的相关信息有机地编织在一起 • 从技术角度上来说,WWW主要由三种标准成分组成: • URL(Uniform Resource Locator,统一资源定位器) • HTTP(Hyper Text Transport Protocol,超文本传输协议) • HTML(Hyper Text Markup Language,超文本标记语言 7.30
WWW与数据库访问 • 静态页面是指只有前台视觉部分的页面设计,不涉及后台数据库的开发处理。静态页面的内容是固定的,对它的修改可以使用普通的文本编辑工具或专用的页面制作工具 • 动态页面,是和静态页面相对应的概念,指的是动态生成的页面,动态页面一般以数据库技术为基础,页面的主要框架结构可以预先确定,而动态内容则存储在数据库中。当用户访问网站时,服务器通过解析用户的请求,读取数据库中的数据来动态生成页面 • 有许多技术可以编写动态页面,除了早期的CGI(Common Gateway Interface,公用网关接口)外,目前流行的动态页面技术主要有JSP(Java Server Page)、ASP(Active Server Page)、PHP(Personal Home Page)等 7.31
Servlet与JSP • Servlet和JSP是Java服务器端J2EE(Java 2 Enterprise Edition)全部集合的一个子集 • Servlet和JSP技术结合在一起形成了J2EE Web应用程序的表示层 • EJB(Enterprise Java Bean),可以用来封装业务逻辑和所有类型的数据库接口,构成了逻辑层 • Servlet是使用print语句产生动态HTML内容的Java类。Servlet采用请求/响应模式提供Web服务 • JSP页面实际上是在一个传统HTML页面中加入Java代码和JSP标记的Web页面。Web服务器在响应JSP页面请求时,首先执行其中的Java代码,然后将执行结果以HTML格式返回给客户端 7.32
JSP页面的转化与处理过程 有JSP容器的Web服务器 helloworld.jsp 2. 读helloworld.jsp 1. GET/helloworld.jsp 3. 生成java文件 6. 返回页面 <html>Hello World!</html> 4. 编译 5. 执行 7.33
JSP标记和内置对象 • 指令:用于指导JSP页面的转换过程 • <%@ 指令 { 属性=“值”}*%> • 脚本元素:都以“<%”标记开始,以“%>”标记结束,可以用来插入Java代码,这些代码将出现在由当前JSP页面生成的Servlet中。 • 动作元素:指定JSP页面在请求时执行的一些动作 • JSP内置对象 • request对象:用户提交的信息通过form表单的get或post方法,将这些信息附加到请求的URL之后,服务器端通过request对象的getParameter方法可以获取这些信息 • out对象:用来向客户端输出数据 7.34
Delphi • Delphi 7.0是Borland公司于2002年推出的可视化的软件开发工具,它属于第四代编程语言,具有简单、高效、功能强大的特点 • Delphi采用面向对象的Object Pascal作为编程语言 • Delphi的特性:基于窗体(form)和面向对象的编程方法,高速的编译器,强大的数据库支持,与Windows编程紧密结合,成熟的组件技术等 • 常见组件有:ADO(Active Data Objects)组件 、数据访问组件 、数据控制组件等 7.35
Delphi开发环境 • 对象目录树(Object TreeView),用来显示窗体中的所有对象,以层次方式来表达对象之间的组成关系 • 对象查看器(Object Inspector),该窗口含有两页,属性(Properties)页显示对象的属性信息;事件(Events)页列出了当前对象可以响应的事件 • 在对象查看器窗口的上方还有一个对象选择器(Object Selector)的下拉式菜单,它显示了窗体上所有对象的名称和类型,也包含窗体本身 • 窗体设计窗口,该窗口是开展界面设计的工作区域,程序运行结果和设计样板是完全一致的 • 代码编辑器,当对象被放到窗体上时,Delphi会自动生成大部分的用户界面代码。你所要做的只是在系统生成的框架中加入完成所需功能的代码 7.36