• 1. 第七章 JSP数据库开发基础知识在Java语言中提供了方便的数据库操作API,通过这些API可以非常方便的操作各种数据库,而且对于不同的数据库来说,只有取得数据库连接部分的操作稍有不同,其他部分基本都是相同的,同样的数据库操作代码可以非常方便的使用到另一个数据库中。在本章的内容中,首先搭建起JSP开发数据库的环境,然后对数据库操作的SQL语言进行简单的介绍,本章的核心部分是使用JSP进行数据库开发的介绍,通过具体的示例,使读者对这项技术有一个整体的认识,从初学者逐步成为一个JSP数据库开发的高手。
  • 2. 7.1 JSP数据库开发环境搭建工欲善其事,必先利其器。要进行数据库的开发,第一步要做的工作就是安装数据库软件,目前常用的数据库有MySQL、SQL,Oracle、DB2等,在本章我们以MySQL和SQLServer2000的安装过程为例,简单介绍JSP数据库开发环境的搭建过程。
  • 3. 7.1.1 MySQL数据库的安装MySQL的安装程序可以从http://www.mysql.com网站上下载,目前的版本是5.0.41,下载下来的安装文件为mysql-essential-5.0.41-win32.msi。直接运行这个文件就可以进行安装,MySQL提供了图形界面的安装向导,根据安装向导的提示,可以非常方便的安装MySQL。下面简单介绍MySQL的安装步骤。(具体内容请参照书。)
  • 4. 7.1.2 SQL Server2000数据库安装SQL Server2000的安装过程更加简便,在安装向导的提示可以非常方便进行安装,在这里不在对SQL Server的安装过程进行详细的介绍。
  • 5. 7.2 SQL基础在与数据库交互的过程中,可以使用各种语言,例如Java、C#甚至是C语言,但是所有这些语言并不是直接操作数据库,而是通过向数据库传递SQL语句来实践数据的操作,SQL语言才是直接处理数据库的语言,在目前常用的关系数据库中,都支持SQL语言的操作。
  • 6. 7.2.1 创建和删除数据库创建数据库的SQL语句如下。 CREATE DATABASE 数据库名称(具体内容请参照书。)
  • 7. 7.2.2 创建、修改、删除数据库表创建数据库表可以是用CREATE TABLE指令,这个指令的使用语法如下。CREATE TABLE 表名( 列名1 数据类型 [DEFAULT(默认值)] [NOT NULL] [UNIQUE], 列名2 数据类型 [DEFAULT(默认值)] [NOT NULL] [UNIQUE] … … … … … [PRIMARY KEY (列名)] [FOREIGN KEY (列名) REFERENCES (表名)])
  • 8. 7.2.3 查询语句在数据库操作中,查询数据的方式有很多,包括基本的查询、选择性查询、限制条件查询、统计查询、多表联合查询等查询操作,在接下来的内容中将逐步介绍这些基本的查询操作。(具体内容请参照书。)
  • 9. 7.2.4 插入、更新、删除语句在本部分的内容中,将介绍表格中数据的基本操作,包括数据的插入、更新和删除操作。(具体内容请参照书。)
  • 10. 7.2.5 简单视图操作视图是虚拟的表,其功能和基本的数据库表类似,但是在视图中并不存储数据,视图仅仅是把实际表格中的数据按照条件提取出来,以表格的形式展示出来,从而方便用户的查询,其实在这个虚拟的表格中并没有任何物理上存储的数据,其中的数据都是从其他表格中提出出来的。(具体内容请参照书。)
  • 11. 7.2.6 简单存储过程操作存储过程(Stored Procedure)是一段可以完成特定功能的SQL 语句,它经过编译后存储在数据库中,用户通过名称调用指定的存储过程,如果这个存储过程中带有参数,在调用的时候需要提供对应的参数输入。(具体内容请参照书。)
  • 12. 7.3 JSP与数据库建立连接一般来说,使用JSP操作数据库都需要下面三个步骤。(1)根据提供的驱动程序名加载对应的数据库驱动程序。 (2)根据连接字符串,从DriverManager中取的与数据库的连接。 (3)在取得的Connection数据库对象基础上进行各种数据操作。
  • 13. 7.3.1 JSP连接SQL Server2000数据库JSP连接SQL Server的时候,需要提供SQL Server的数据库驱动,在这里可以有两种选择,一种是微软官方提供的数据库驱动,另一中是开源的JTDS驱动,在这里我们选择微软广方提供的JDBC数据库驱动程序。(具体内容请参照书。)
  • 14. 7.3.2 JSP连接MySQL数据库JSP连接MySQL数据库的时候,同样也需要数据库驱动, MySQL的驱动程序名为MySQL Connector/J,读者可以在http://dev.mysql.com/downloads/上找到各个版本的驱动程序。这个驱动无需安装,直接解压下载下来的文件,把 拷贝到应用项目的/WEB-INF/lib目录中,就可以在JSP中同通过这个JDBC驱动连接MySQL数据库,这个数据库驱动的名称和连接字符串如表7.2所示。
  • 15. 7.3.3 JSP连接Oracle数据库Oracle为不同版本的数据库提供了不同的JDBC驱动程序,可以在Oracle的官方网站上下面这个链接下载对应版本的驱动程序。(具体内容请参照书。)
  • 16. 7.3.4 JSP连接数据库简单示例上面介绍了JSP连接常见的几种数据库开发环境的基本配置,(具体内容请参照书。)
  • 17. 7.4 JSP操作数据库在以上的内容中,介绍了JSP数据库开发的准备知识,在接下来的内容中,将使用这些基础知识进行数据库的操作,操作的数据库选择在前面章节中已经创建的STUDENTS数据库。在本节的内容中,首先介绍数据库最简单最基本的增删改查操作,在了解这些基本知识的基础上引入数据库事务操作的概念,最后介绍两中具有实用价值的技术。视图和存储过程,这是数据库操作水平进一步提高所必须掌握的。
  • 18. 7.4.1 JSP插入数据操作在执行数据的插入操作时,首先要建立与数据库的连接,然后把SQL语句传递到数据库中,通过SQL语句来操作数据库中的数据。在下面的示例程序中,将向student表中插入一条记录,具体代码如下。(具体内容请参照书。)
  • 19. 7.4.2 JSP删除数据操作在JSP中,删除数据的操作和插入数据的操作很相似,不同之处只是执行的SQL语句不同,在下面的示例程序中,将从student表中删除满足条件的记录,(具体内容请参照书。)
  • 20. 7.4.3 JSP更新数据库操作在数据库的更新操作中,并没有新的知识点,数据库的连接和操作的方法和前面数据库插入删除操作的方法是一样的,不同之处就是在这里执行的是更新数据库的SQL语句,在下面的示例程序中,将更新数据库中符合条件的数据记录,(具体内容请参照书。)
  • 21. 7.4.4 JSP查询数据库操作在数据库的查询操作中,可以通过数据库连接执行SQL查询语句,返回的结果是ResultSet结果集对象,可以在程序中取出并展示结果集中的数据,在下面的示例程序中,将从student表中取出满足条件的数据,并以表格的形式展示取出的结果,(具体内容请参照书。)
  • 22. 7.4.5 JSP中的数据库操作事务处理在数据库操作中,事务处理是经常用到的,例如在银行的业务中,甲方给乙方账户转账10万人民币,首先要从甲方的账户减去10万,然后再给乙方的账户增加10万,整个操作过程是一个整体,这就是一个简单的事务,在这个事务中必须保证操作的完整性,两步操作要么全执行,如果其中一步出错全都不执行,从而保证这个业务的正确性和完整性。(具体内容请参照书。)
  • 23. 7.4.6 JSP查询视图视图是一种虚拟表,所以视图的查询和表格的查询方法一样,无非是在这里把表格名称换成视图的名称, 在SQL语法介绍中,我们创建了一个名为V_STUDENTS的视图,在下面这个示例程序中将与对这个视图进行简单的查询,(具体内容请参照书。)
  • 24. 7.4.7 JSP调用存储过程在本书的7.2.6小节中,分两种情况介绍了存储过程的创建方法,所以在这里也分为两种情况介绍存储过程的调用方法,包括调用无参数的存储过程和调用有参数的存储过程。(具体内容请参照书。)
  • 25. 7.5 数据库连接池在大量数据库访问的应用系统中,数据库处理的速度往往会成为系统性能的瓶颈,数据库资源的处理不当往往会给系统的性能带来很大的影响,严重的情况下甚至可以导致整个系统的瘫痪,在本节的内容中将会详细介绍数据库资源的利用问题。
  • 26. 7.5.1 数据库开发中面临的数据库资源问题在数据库应用程序的开发中,经常会遇到数据库资源的问题,一般情况下有一下几种情况。 1.普通的JDBC连接带来的效率问题 2.数据库资源使用不当带来的性能问题
  • 27. 7.5.2 数据库连接池的工作原理数据库连接池就是在系统初始化的时候,建立起一定数量的数据库连接,然后通过一套数据库连接的使用、分配、管理策略,使数据库连接可以得到高效、安全的复用,避免了频繁建立、关闭数据库连接带来的系统开销,另外,使用数据库连接池可以把系统的逻辑实现和数据库分离,在传统的实现过程种,是在应用程序中直接访问数据库,使用连接池以后,所有的数据库连接都可以从连接池中取出,由连接池访问数据库,维持连接池中可用连接的数量。
  • 28. 7.5.3 常用的数据库连接池简介在实际的开发中,可以选择自己实现一个连接池,但是一般情况下我们会选择第三方提供的程序的连接池产品,目前有很多成熟的连接池可以选择。
  • 29. 7.5.4 在Tomcat中配置DBCP数据库连接池在Tomcat中配置DBCP数据库连接池的方法有很多,但是配置都相对比较繁琐,在这里提供一种比较简单的DBCP连接池的配置方法。(具体内容请参照书。)
  • 30. 7.5.5 从连接池中取得连接示例通过上节的配置,已经可以在程序中使用DBCP连接池的功能,在下面的实例程序中,将在一个JSP页面中调用DBCP的功能,从连接池中取出一个数据库连接,(具体内容请参照书。)
  • 31. 7.5.6 测试连接池设置是否生效在上面的实例程序中,仅仅展示了从连接池中取出连接的情况,但是还没有测试连接池是否可以正常释放资源,这一点是很多开发人员容易忽视的问题,一般情况下,很多开发人员只要可以从连接池中取出连接就认为连接池已经配置成功,然后就开始在程序中使用连接池的功能,这种做法往往在埋下错误的隐患。
  • 32. 7.5.7 使用DBCP自动回收数据库连接资源在进行数据库操作的时候,数据库的连接是必须释放的,连接池的最大功能是维护一定数量的连接,从而节省建立、关闭数据库连接的时间,在程序中调用的数据库连接是必须关闭的,只有关闭以后,这个连接才会被释放到连接池中,从而可以供其他程序使用。(具体内容请参照书。)
  • 33. 7.6 数据库访问的代码优化通过前面章节中的介绍,读者可以对数据库的基本操作有了一个整体的认识,利用这些基本知识,读者可以进行基本的数据库操作,在本章前面的所有示例程序中,展示的都是最基本的数据库访问操作,目的是让读者能够不受其他因素的干扰,专注于数据库操作功能的实现。但是,从可复用、从软件架构的方面、从软件的升级维护等方面来看,这些是远远不够的,在接下来的内容中,将深入剖析数据库操作更深层次的知识,试读者可以在技术层面有一个质的飞越。
  • 34. 7.6.1 最原始的数据库访问代码示例在上面的所以例子中,都需要使用下面这段代码来建立与数据库的连接。
  • 35. 7.6.2 初步优化――数据库配置信息基础类在这种原始的数据库访问操作中,更改数据库的配置信息是非常麻烦的。现在可以考虑这样的处理方法,把数据库的配置信息用常量表示,所有的数据库配置信息都可以放在一个类中,具体实现方式如下。(具体内容请参照书。)
  • 36. 7.6.3 进一步优化――数据库配置文件为了解决用常量表示数据库配置信息带来的问题,避免重新编译部署应用项目,就需要把数据库配置的信息从Java类中提出出来,在这里我们属性文件来代替描述常量的类,经过这样的处理就可以避免重新编译、部署应用系统的问题。
  • 37. 7.6.4 继续优化――数据库访问操作类的封装在前面的几节内容中,对如何合理组织数据库配置信息进行了简单的结束,但是在这些示例程序中我们可以看出,取得数据库连接的依然要重复操作,同样需要加载数据库驱动类、取得连接和进行数据库操作这些步骤,在每个需要数据库操作的地方都要重复这样的代码,那么有没有方法避免这些代码的重复?答案就是对这些代码进行封装。(具体内容请参照书。)
  • 38. 7.6.5 更进一步优化――DAO类封装数据库操作在进行本节内容的介绍之前,先来看下面这段代码。(具体内容请参照书。)
  • 39. 7.6.6 追求完美的优化――添加视图、存储过程在上面介绍的各项优化措施中,都是从软件工程方面考虑,对程序的代码进行科学的优化,单是这些措施并不涉及数据库操作的性能问题,在接下来的内容中,将对数据库操作的性能问题进行探讨。数据库操作性能的要求,一般情况下在需要大量数据库操作的项目种会显得特别迫切。在提升数据库性能方面可以通过合理涉及数据库结构和SQL优化等措施,但这些都不是本节中要讨论的主题,本章的侧重点是在数据库结构已经定型的其功能下,通过合理的访问策略来优化数据库访问的性能。
  • 40. 7.7 小结在本章的内容中,介绍了SQL语言的基础知识,虽然介绍的这些操作都可以在数据库管理工具中实现,但是理解这些基础的知识有利于读者在更深的层次了解数据库的原理和操作。本章还介绍了在JSP中操作数据库的基本方法,并且通过一系列的优化措施,把复杂的数据库操作优化成简单的、优美的代码,在整个优化过程中,读者不仅可以了解到数据库操作优化的方法,更重要的是要体会这些优化中所体现的思想,了解这些思想以后读者自己就可以根据需要来优化自己的数据库操作,或者优化其他非数据库操作的代码。