《JSP程序设计》教学.ppt_第1页
《JSP程序设计》教学.ppt_第2页
《JSP程序设计》教学.ppt_第3页
《JSP程序设计》教学.ppt_第4页
《JSP程序设计》教学.ppt_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章JDBC简介,数据库是数据管理最重要的途径之一,也是Web应用最重要的数据源。在早期,对数据库的访问都是使用数据库厂商提供的专用API(applicationprogramminginterface,应用程序编程接口)进行的。Java语言发布后,为了支持数据库的访问操作,Sun公司于1996年推出了JDBC(Javadatabaseconnectivity,Java数据库连接)。JDBC定义了一套访问关系数据库的标准Java类库。通过JDBCAPI,用户可以方便地操作关系数据库。此外,JDBC还为数据库厂商提供了一个标准的体系架构,厂商能够针对数据库产品提供特定的JDBC驱动程序,从而提高了Java访问数据库的效率。本章逐一介绍了JDBCAPI主要的接口功能和使用方式,并给出了相应的示例程序。最后利用JDBCAPI实现了一个简单的学生管理系统,其中包括学生信息的增加、查看、修改和删除等功能。,4.1SQL语言与JDBC,SQL(structuredquerylanguage,结构化查询语言)语言是于1974年由Boyce和Chamberlin提出,并在1979年由IBM公司在其研制的关系型数据库SystemR中实现的。由于SQL语言功能丰富、语法简洁,因此深受用户的喜爱。1986年10月,美国国家标准局批准SQL语言作为关系型数据库的标准语言。SQL语言是一种介于关系代数和关系演算之间的结构化查询语言,但SQL语言不仅仅局限于查询,它是一个通用的、功能强大的关系型数据库语言。在基于Java的应用程序开发过程中,为了降低程序开发的复杂度,提高程序开发效率,通常使用JDBC和SQL相互配合,共同完成访问关系型数据库的工作。JDBC负责将SQL语句传递给数据库,然后从数据库中获取返回结果,并组装为结果集返回给客户,其运行方式如下图所示。,4.2JDBCAPI,JDBCAPI是Java平台提供的一个标准的数据库访问接口集,是支持数据库操作的类与方法的集合,利用它开发人员在编写应用程序时不必考虑所用的数据库。JDBCAPI包括java.sql和javax.sql两个包。java.sql包包含了JDBC的核心API;而javax.sql包则包含了JDBC标准的扩展API。JDBCAPI提供了以下基本功能:(1)建立与数据源的连接。(2)向数据源发送查询和更新语句。(3)处理从数据源得到的结果。实现上述功能的JDBCAPI的核心类和接口均定义在java.sql包中。熟练掌握这些类和接口的使用方法,是JDBC程序设计的基础,也是构建更复杂、更高级的应用程序的必要条件。,4.2.1管理驱动程序类DriverManager,DriverManager类是JDBC的管理层,作用于用户和数据库驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager类也处理诸如驱动程序登录时间限制,以及登录和跟踪消息的显示等事务。DriverManager类中常用的方法如下表所示。,4.2.2数据库连接类Connection,Connection对象代表与数据源进行的唯一对话。Connection类提供了进行事务处理、创建执行SQL语句和创建存储过程所用对象的方法。同时,Connection类还提供了一些基本的错误处理方法。Connection类的实例可以通过DriverManager.getConnection()或DataSoure.getConnection()方法创建。java.sql.Connection类提供的常用方法如下表所示。,4.2.3SQL声明类Statement,Statement类用于将SQL语句发送到数据库中。实际上有三种Statement类:Statement、PreparedStatement和CallableStatement,它们都专用于发送特定类型的SQL语句。其中,Statement用于执行不带参数的简单SQL语句。Statement对象用Connection的createStatement方法创建,具体格式如下:Statementstmt=conn.createStatement();,4.2.4PreparedStatement类,由上一节可知,Statement类使用SQL语句直接处理查询。在执行过程中,Statement类把SQL语句提交给数据库,数据库分析执行SQL语句,然后将执行结果返回给用户。值得注意的是,使用Statement类,即使重复执行同一查询,SQL语句也要由数据库再次格式化;尤其是当SQL语句中包含where子句时,每一次查询都需要数据库解析、优化,然后才能返回执行结果。因此,使用Statement类将会在很大程度上影响重复数据查询的执行效率。为了提高查询效率,对于同一个查询语句,JDBCAPI提供了PreparedStatement类来优化这一过程。PreparedStatement是Statement的扩展,代表了一条预设SQL语句。预设语句是指预先将SQL语句传送给数据库,并在数据库中被编译、优化并缓存。也就是说,使用PreparedStatement类,SQL语句不需要在每次执行时都由数据库重新编译和优化,而仅需编译和优化一次,这就提高了执行查询的效率和性能。另外,已编译的SQL语句可以指定输入参数,用于定制特殊SQL语句的执行效果。输入参数可以是select或者update语句中的where子句中的值,也可以是insert语句中的values子句中的值。使用预设语句时,PreparedStatement将SQL语句及其参数提交给数据库,由数据库对这些语句进行预处理。,4.2.5查询结果类ResultSet,一旦建立了数据库连接并执行了SQL语句,就可以从Statement实例中获取一个以ResultSet表示的结果集。ResultSet类封装了执行SQL查询所得到的数据行或元组。ResultSet类提供了一系列的方法,用于在返回的结果集中自由移动指针,以加强应用程序的灵活性并提高访问数据的效率,这些方法如下表所示。,4.2.2文本的编辑,4.2.6数据库操作异常类SQLException,基本上所有JDBCAPI的方法都会抛出SQLException异常。这个异常类继承了java.lang.Exception接口,并通过重写的getMessage()方法获取产生异常的原因和所生成异常的相关信息。SQLException类的构造方法包含了一个字符串,这是数据库服务器或JDBC驱动程序根据SQL状态给出的异常产生原因。SQL状态是一个标准化的字符串,包含了产生异常的SQL处理状态,以及与数据库厂商相关的错误码(一个整数)。SQLException类提供的构造方法如下:(1)SQLException():创建一个新的SQLException,将产生异常的原因、SQL处理状态以及厂商错误码的值设为NULL。(2)SQLException(Stringreason):创建一个新的SQLException,设置产生异常的原因,并将SQL处理状态以及厂商错误码的值都设为NULL。(3)SQLException(Stringreason,StringSQLState):创建一个新的SQLException,设置产生异常的原因和SQL处理状态,并将厂商错误码的值都设为NULL。(4)SQLException(Stringreason,StringSQLState,intvendorCode):创建一个新的SQLException,并设置产生异常的原因、SQL处理状态以及厂商错误码的值。,此外,SQLException类提供了如下方法,以实现被抛出异常的内部数据的访问:(1)intgetErrorCode():返回异常的厂商错误码。(2)SQLExceptiongetNextException():如果还有异常,则检索异常链中的下一个异常。(3)StringsetNextException(SQLExceptione):设置当前对象的异常链中的下一个异常。注意:由于大部分JDBC方法都会抛出SQLException异常,因此,在应用程序中,必须捕捉异常对象,并进行适当的处理,然后把错误码返回给调用者。此外,在程序运行结束时,必须使用finally语句块关闭Connection对象,而不管是否产生了SQLException异常。,4.3JDBC驱动程序的类型,通常,当数据库厂商推出自己的数据库产品时,都会提供一套访问数据库的API,这些API能以各种编程语言的形式提供,客户端程序通过调用这些专有的API来访问数据库。各个厂商提供的数据库访问API不尽相同,导致构建在某一个特定数据库上的应用程序不能移植到另一个数据库上。JDBC以Java类库的形式取代数据库厂商的专有API,客户端只需要调用JDBCAPI,而处理与数据库通信的具体操作由JDBC的实现层(即JDBC驱动程序)完成,从而降低了应用程序与数据库之间的耦合度。,JDBC驱动程序分为以下四类:(1)JDBC-ODBC桥。(2)Java到本地API。(3)JDBC网络纯Java驱动程序。(4)本地协议纯Java驱动程序。,4.3.1JDBC-ODBC桥连接,因为Microsoft推出的ODBC比JDBC出现的时间要早,所以绝大多数的数据库都可以通过ODBC来访问,当Sun公司推出JDBC的时候,为了支持更多的数据库,特意提供了JDBCODBC桥。JDBCODBC桥本身也是一个驱动,利用这个驱动,用户可以使用JDBCAPI通过ODBC去访问数据库。这种桥机制实际上是把标准的JDBC调用转换成相应的ODBC调用,并通过ODBC把数据库调用发送给ODBC数据源,其原理如下图所示。,由图可以看出,通过JDBC-ODBC桥的方式访问数据库需要经过多层的调用,因此,利用JDBC-ODBC桥访问数据库的效率比较低。然而,当数据库没有提供JDBC驱动,只有ODBC驱动的情况下,也只能利用JDBC-ODBC桥的方式访问数据库,例如,在访问Access数据库时,就只能使用JDBC-ODBC桥来访问。,4.3.2Java到本地API,大部分数据库厂商都提供与他们的数据库产品进行通信所需要的调用API,这些API往往用C语言或类似的语言编写,依赖于具体的平台。此类型的JDBC驱动程序使用Java语言编写,并能够调用数据库厂商提供的本地API。此时,利用JDBCAPI访问数据库时,JDBC驱动程序将数据库调用请求转换为厂商提供的本地API调用,数据库处理请求,然后将处理结果通过这些API返回,进而返回给JDBC驱动程序,最后,JDBC驱动程序将结果转化为JDBC标准形式,再返回给客户程序。其原理如下图所示。,从图中可以看到,通过这种类型的JDBC驱动程序访问数据库时,减少了ODBC的调用环节,提高了数据库访问的效率,并且能够充分利用厂商提供的本地API功能。但是,在这种访问方式下,需要在客户的机器上安装本地JDBC驱动程序和特定厂商的本地API。,4.3.3JDBC网络纯Java驱动程序,这种驱动利用作为中间件的应用服务器来访问数据库。应用服务器作为一个或多个数据库的网关,客户端通过它可以连接到不同的数据库服务器。应用服务器通常都有自己的网络协议,Java程序通过JDBC驱动程序将JDBC调用发送给应用服务器,应用服务器使用本地驱动程序访问数据库,从而完成请求。其原理如下图所示。,使用这类驱动程序的优点是可以直接通过JDBC访问网络数据库,不需要安装驱动程序,程序与平台无关,不仅可以用在一个第三方的解决方案中,而且可以在Internet上使用。,4.3.4本地协议纯Java驱动程序,这种类型的JDBC驱动程序完全用Java语言编写,通过与数据库直接连接的套接字进行通信,它采用厂商相关的网络协议把JDBCAPI调用转换为直接的网络调用(如OraclethinJDBCdriver)。其原理如下图所示。,这种类型的驱动是四种类型驱动中访问数据库效率最高的,不过,由于每个数据库厂商(Oracle,Microsoft,Sybase等)都为自己的数据库产品提供了这种类型的驱动,因此,访问不同的数据库时,需要使用不同的JDBC驱动程序。在本章第4节中,将使用此类型的驱动程序操作数据库。,本章小结,本章主要学习了关系型数据库中SQL语言的基本功能和使用方式,以及JDBCAPI的核心接口和常用方法。在此基础上,用JSP和数据访问对象实现了一个较为完整的数据显示Web应用程序。其中,SQL语言是操作关系数据库的标准语言。尽管SQL语言结构简单,但功能非常强大,可以完成数据库整个生命周期的管理和数据访问操作。JDBC提供了Java程序访问关系数据库的方法。在JDBC中,定义了一系列的接口,如Connection接口、Statement接口和ResultSet接口等,通过这些接口,用户可以方便地与数据库交互,构建更复杂、更高级、更易用的应用程序。,第5章JavaBean技术,此前介绍的JSP页面中混合了HTML代码和Java代码,页面的显示逻辑和业务逻辑混杂在一起,代码的可读性差,维护难度高。为了分离页面中的HTML代码和Java代码,一个很自然的想法就是单独编写一个类来封装页面的业务逻辑。在页面中,只需简单地编写几句调用类中方法的代码,即可完成所需的功能。这种方式,不但提高了代码的复用率(多个页面可调用同一个类的方法),而且将页面的显示逻辑和业务逻辑也区分开了。在JSP技术中,负责完成业务逻辑的类可用JavaBean组件来实现。,5.1JavaBean概述,JavaBean是描述Java的组件模型,类似于Microsoft的COM组件概念。在Java模型中,通过JavaBean可以扩充Java的程序功能,通过JavaBean的组合还可以快速生成新的应用程序。对于程序员来说,使用JavaBean可以实现代码的重复利用,使得程序更易维护。JavaBean就是一个特殊的Java类,这个类必须符合JavaBean的规范。JavaBean原来是为了能够在一个集成开发环境中可视化、模块化地利用组件技术开发应用程序而设计的。虽然在JSP中不需要使用任何可视化的功能,但仍然需要利用JavaBean的属性、事件、持久化和用户化来实现模块化的功能。,5.1.1JavaBean特性,下面介绍在JSP开发中经常用到的JavaBean规范的一部分,主要有属性特点、构造方法等。1.构造方法标准的JavaBean中一定要有一个不需要任何参数的构造函数,这个构造函数在使用实例化JavaBean类时调用。如果JavaBean类中没有任何构造函数,系统会自动生成一个没有参数的构造函数。2.属性JavaBean中的属性都应该定义为私有的,这样这些属性就只能通过JavaBean内的方法访问或修改,从而较好地保护数据的完整性和封装性,也可以对数据加以约束。,5.1.2属性的类型,JavaBean有简单(Simple)属性、索引(Index)属性、绑定(Bound)属性和约定(Constrained)属性四种类型的属性。1.简单属性简单属性表示伴随有一对get/set方法的变量。属性名和该属性相关的get/set方法名对应。2.索引属性索引属性表示一个数组值。使用该属性对应的set/get方法可获取数组中的数值,该属性也可一次设置或取得整个数组的值。,5.2使用JavaBean访问数据库,本节通过讲解如何利用JavaBean连接并显示数据库表中的记录。在第4章已讲过连接SQLServer数据库的方法,现以SQLServer为例,将连接封装在JavaBean中,通过Bean来连接数据库,并访问数据库中的表。,5.2.1设计访问数据库的JavaBean,首先编写连接数据库的JavaBean程序conn.java,数据库名为JspDataBase,用户名与密码已知,数据库JSP中已存在数据表student,主要存放关于学生学号、姓名和成绩的信息。在conn.java程序中,首先加载SQLServer驱动,语句如下:Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);然后使用DriverManager对象的getConnection(dbURL,dbUser,dbPassword)方法建立连接,其中指定参数dbURL为“jdbc:microsoft:sqlserver:/localhost;DatabaseName=JSP;SelectMethod=Cursor”,然后创建SQL语句对象。关于数据库连接程序第4章已有介绍,这里不再详述。,5.2.2在JSP中调用JavaBean访问数据库,下面介绍一个具体实例来演示如何在JSP中调用访问数据库的JavaBean。实例详见教材117页。,5.3综合案例,JavaBean具体的实施部署步骤如下:首先建立Web项目,将编好的JavaBean代码放入项目文件夹中的WEB-INFclasses文件夹下(注意需要为JavaBean指定一个包名),然后就可在项目中的JSP文件中调用JavaBean了。以下是两个具体的实例。,5.3.1用户注册的JavaBean,本节中,将通过一个简单的例子演示如何在JSP页面中访问JavaBean。首先提供一个注册表单,让用户输入相关的信息,在用户提交表单后,将用户的注册信息保存到JavaBean对象中,然后在另一个页面通过读取JavaBean的属性来获得用户的注册信息。,5.3.2动态日历,本节主要讲解如何使用JavaBean实现一个能根据年、月进行查找的日历程序。本例具体步骤详见教材126页。,本章小结,本章主要介绍了JavaBean的基本知识。利用JavaBean组件来封装业务逻辑,可以避免在HTML中嵌入大量的Java代码,使得页面的显示和业务逻辑分离,提高了代码的可维护性。通过JavaBean实现数据库连接及事物处理过程,可有效地将静态、动态工作分离开来,减少代码量,增强代码可读性并能极大地提高效率。,第6章JSP与XML,随着Web的广泛运用,HTML的局限性逐渐显露出来。HTML缺乏扩展性,标记定义比较模糊,因此可能导致错误的蔓延。人们在开发Web应用时需要一种标准化的、具备高可扩展性并且结构严谨的新语言,由此诞生了XML。XML是W3C推出的一种标记语言,它组合了其前身语言SGML的强大功能和可扩展性,以及Web应用的简洁性。目前,XML已经成为计算机行业内最热门的技术,它获得了广泛的行业支持,并且由于不断加强XML标准,从而使XML可以跨越所有边界,实现真正独立、跨平台的数据传送格式。,6.1XML语法规则,XML的全称是extensiblemarkuplanguage,意思是可扩展的标记语言,它是标准通用语言(standardgeneralizedmarkuplanguage,SGML)的一个子集。XML的语法规则既简单又严格,非常容易学习和使用。正因为如此,编写读取和操作XML文档的软件也是相对容易的事情。首先来看一个XML文档(CH6-1.xml)的例子。XML文档使用了自描述和简单的语法。古乐声国防科技大学计算机,代码的第1行是XML声明,并且定义XML的版本,目前发布的是1.0版本,使用gb2312字符集;代码的第2行是这段代码内容的根元素,类似文章的标题,是XML文档所必须声明的元素;代码的第35行是根元素的子元素,在这里有3个子元素(作者、出版社、题材);最后一行的代码则定义了根元素的结束,至此一段完整的XML代码就算完成了。从上面的例子可以看出,所有的元素都要有闭合标记,这并非是一个巧合,而是XML语法规则定义的。,1.元素必须有闭合标记2.XML标记都是大小写敏感的3.在XML中必须正确嵌套4.所有XML文档必须有且只能有一个根元素5.XML文档元素的属性值必须使用引号6.XML文档中的空白将被保留,6.2XML文档结构,一个XML文档从逻辑上可以分为五个部分:XML声明、文档类型声明、元素、注释、处理指令。,6.2.1XML声明,XML数据文件的定义不像HTML那样自由,它是非常严格的。XML文档总是从一个XML声明开始,在其中指明所有的XML版本和文档编码等信息。下面是一个完整的XML声明:XML文件的声明必须存在而且放在第一行,否则解析器不予解析。声明的作用是告诉浏览器或者其他处理程序这个文档是XML文档。声明语句中的“version”表示文档遵守的XML规范的版本,它必须在属性列表中第一个出现;“standalone”表示文档是否是独立的,如果不带附带DTD(DocumentTypeDefinition,文档类型定义)文件,则将该参数设置为yes,如果附带有DTD文档,则将该参数设置no;“encoding”表示文档所用的语言编码,默认是UTF-8。,6.2.2文档类型声明,在一个XML文档中,用户可以任意定制标签,但是当将XML文档提交给其他人使用时,那么文档一定要有相应的DTD文件,并且要严格遵守DTD文件制定的规范。XML从SGML继承了用于定义语法规则的DTD机制,几乎所有的XML应用都是用DTD来定义的。HTML文件就是一个严格遵守DTD机制的文件,所以其组织结构和所有的标签都是固定的。DTD文件也是一个文本文档,通常用“.dtd”作为其扩展名。通过文档类型声明,指出XML文档所使用的DTD,DTD文件的声明语句紧跟在XML声明语句后面。文档类型声明有两种形式,一种是在一个外部的文件中声明DTD。格式如下:,6.2.3元素,元素是XML文档的基本单元,基本XML文档必须包含一个或多个元素。一个XML文档必须包含根元素,并且只能包含一个根元素。一个元素的起始标签和结束标签的名字必须相匹配,并且标签名是大小写敏感的。所有以起始标签开始的元素都必须以与起始标签同名的结束标签作为结束,在起始和结束标签中间的文本是元素的内容,无内容的元素可以使用一种特殊的形式,即。这里,“”之前的斜线实际上代替了结束标签。元素名可以由字母、数字、连字符号、下划线、冒号以及句号组成。冒号用于划分命名空间。元素可以没有或者有一个或多个属性,属性名的命名规则同元素命名规则相同。其名字和值由“=”分隔,并且属性值必须在单引号或者双引号之间,如果要在属性值里面使用单引号或双引号,那么就必须使用反斜线来进行转义。,元素和属性的格式如下:元素的数据XML元素的内容可以包含子元素、字符数据、字符引用和预定义实体引用、CDATA段。,1.子元素子元素本身也是元素,被嵌套在上层元素之内。子元素是相对于父元素而言的,如果子元素还嵌套了其他元素,那么它同时也是父元素。2.字符数据在一个元素中,字符数据可以是不包括任何标记的起始定界符和CDATA段的结束定界符在内的任意字符串,就是说在元素的内容中,字符数据不能有和号(D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论