JSP学习笔记07JDBC

JSP是一种执行于服务器端的动态网页开发技术,它所要实现的动态功能主要是将存储在后台数据库中的数据动态的展示给用户,大部分的JSP项目都要用到数据库。

数据库是一个结构化的数据集合,MySQL是一个关系数据库管理系统,把数据存放在分立的表格中,MySQL服务器包含了一个由用户紧密合作开发的实用特性集。MySQL数据库服务器是一个客户/服务器系统,它由多线程SQL服务器组成,支持不同的后端、多个不同的客户程序和库、管理工具和广泛的应用程序接口(APIs)。MySQL也可以是一个嵌入的多线程库,用户可以把它连接到应用中而得到一个小、快且易于管理的产品。

与数据库交互是WEB应用程序的一个重要的组成部分,JSP使用JDBC(Java DataBase Connectivity)技术来实现与数据库的连接。JDBC提供了JSP操作数据库的各种接口程序。很多数据库管理系统提供JDBC驱动程序,JSP可以直接利用它访问数据库,一些数据库管理系统没有提供JDBC驱动程序,JSP可以通过Sun公司的JDBC-ODBC桥来实现对它们的访问。

JDBC是一种可用于执行SQL语句的Java API(Application Programming Interface 应用程序设计接口),它由一些Java语言编写的类和页面组成。

JDBC的用途
与数据库连接、发送SQL语句和处理语句执行结果三种。有了JDBC API,就不必为访问数据库专门编写一个程序,只需要保证所使用的SQL语法在各种数据库中都支持就可以了。

JDBC支持两层模型,也支持三层模型访问数据库。

JDBC API的作用就是屏蔽不同的数据库驱动程序之间的差别,使得设计人员有一个标准的、纯java的数据库程序设计接口,为在Java中访问任意类型的数据库提供技术支持,而驱动程序管理器(Diver Manager)则为应用程序加载数据库驱动程序。数据库驱动程序是与具体数据库相关的,用于向数据库提交SQL请求。

共有4种类型的JDBC驱动程序。

JDBC连接数据库的方法
即直接通信、通过JDBC驱动程序通信以及通过ODBC通信。

1)与数据源直接通信,就是使用它的协议创建一个直接与数据库通信的驱动程序。这样,只要客户机使用了同样的协议,就可以访问多种类型的数据库,但直接通信要求数据库文件为二进制格式,且能直接对文件进行读/写操作,这就大大影响了系统的安全性。

2)通过JDBC驱动程序通信比直接通信要容易,但采用这种方法首先必须编写一个实际的JDBC驱动程序,这个程序可以实现在JDBC API中定义的不同接口,以便与属于数据库的转悠驱动程序通信。

3)JDBC通过JDBC-ODBC桥与ODBC数据源相连,从而实现Java与数据库的连接。

使用JDBC操作数据库

JDBC的接口分为两个层次:一是面向程序开发人员的JDBC API,一是底层的JDBC Driver API。

JDBC是一个标准的Java API,由一组类和接口组成,使用它来访问数据库和执行SQL语句。

JDBC访问数据库可以分为连接数据库和操作数据库。

1)JDBC连接数据库分为加载驱动程序和建立连接两个步骤。

2)JDBC操作数据库,首先执行SQL语句,SQL语句发送后,返回的结果通常存放在一个ResultSet类的对象中,可以看作是一个表,这个表包含由SQL返回的列明和相应的值,ResultSe对象中维持了一个指向当前行的指针,通过一系列的getXXX方法可以检索当前行的各个列,并显示出来。对ResultSet对象进行处理后,才能将查询结果显示给用户。ResultSet类的getXXX方法可将结果集中的SQL数据类型转换为Java数据类型。在对象使用完毕后,应关闭连接。

使用Statement执行SQL语句
java.sql包下有两个非常重要的接口—-Statement与ResultSet,其中Statement定义运行SQL指令所需的方法成员,ResultSet封装运行SQL指令之后所返回的数据内容。

JSP页面在使用Statement的功能之前,必须先取得其对象,通过引用Connection接口类型对象的方法成员createStatement()所产生的。

Statement对象的方法
close() 结束对象,释放占用资源
addBatch() 将要运行的SQL指令加到批处理指令中
clearBatch() 清楚所有的SQL批处理运行指令
executeBatch() 运行SQL批处理指令
execute(String sql) 运行SQL一般指令
executeQuery(String sql) 运行SQL查询指令,如select指令
executeUpdate(String sql) 运行SQL更改命令,如insert、delete、update
getConnection() 返回产生这个Statement对象的Connection对象
setMaxRows(int max) 设置ResultSet对象中可包含的最多数据笔数为max
getMaxRows() 返回ResultSet对象中可包含的最多数据笔数

/*executeQuery()方法在Statement接口中完整的声明*/
ResultSet executeQuery(String sql)throws SQLException;

Java与SQL各自有一套自己定义的数据类型(JSP的数据类型实际上就是Java的数据类型),要在JSP程序和数据库管理系统之间正确的交换数据,必然要将二者的数据类型进行转换。

连接池
在WEB应用程序中,数据库连接是一种重要的资源,对数据库连接的管理能显著影响到整个应用程序的可伸缩性和健壮性,数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。释放空闲时间超过最大空闲时间的数据库连接,从而避免因为没有释放数据库连接而引起的数据库连接遗漏,这样可以显著提高对数据库操作的性能。

对于访问量很高的系统来说,每次创建一个连接都会消耗一定的资源,会降低系统的访问效率。可以事先创建好一定数量的连接放入连接池中,提供给用户使用,用户使用完后把连接返回连接池。

1)创建连接池
首先要创建一个静态的连接池。这里的“静态”是指池中的连接是在系统初始化时就分配好的,并且不能随意关闭。

2)分配、释放策略
创建好连接池后,需要提供一套自定义的分配、释放策略以保证数据库连接的有效复用。采用两级连接池:空闲池和使用池,空闲池中存放目前还没有分配出去被使用的连接,一旦一个链接被分配出去,就会放入到使用池中,并且增加引用计数,一旦空闲池中的连接全部分配出去,就可以根据相应的策略从使用池中挑选出一个已经正在使用的连接用来复用,而不是随意拿出一个连接去复用。策略可以根据需要去选择,比较简单的做法是复用计数最小的连接。因为Java面向对象的特性,使得可以灵活的选择不同的策略。

3)配置策略
配置策略需要解决数据库连接池中的连接数量,以及耗尽后该如何处理。一般情况下,配置策略在开始时就根据具体的应用需求,给出一个初始的连接池中连接的数目以及一个连接池可以扩张到最大连接数目。

配置连接池时需要注意的问题
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,数量是由最小数据库连接数来设定的,无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量(如果对数据库连接需求不大,将会浪费)。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中(如果设置的较小,则会影响之后的数据库操作)。如果最大最小连接数之间相差太大,超过最小连接数量的连接请求等价于建立一个新的数据库连接,而大于最小连接数的数据库连接在使用完之后不会马上被释放,而是被放到连接池中等待重复使用或是空闲超时后被释放。

MySQL数据库的分页语句
它通过使用LIMIT函数实现,从数据表中第M条记录开始查询N条记录。

SELECT *FORM 表名称 LIMIT M-1,N

将查询获得的数据信息,保存到Vector集合类中,在JSP页面只要显示这个集合类中的数据就可以了。

你可能感兴趣的:(JSP)