高级数据库的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2011年11月4日
13
maxIdle指定数据库连接池中处于空闲状态 的数据库连接的最大数目,若为0则不限制 maxWaitIdle指定数据库连接池中数据库连 接处于空闲状态的最长时间,以毫秒为单位, 超过这一时间将会抛出异常。若为-1则可以 无限等待 Usename Password driverClassName url
2011年11月4日
8
外部应用程序访问对象工厂中的对象的过程:
context.lookup(“obj1”) Obj1 JAVA程序 程序
Obj2
对象工厂 Obj3 Obj4
2011年11月4日
9
Tomcat把DataSource作为一种可配置的JNDI资 源来处理,生成DataSource对象的工厂为 org.apache.commons.dbcp.BasicDataSour ceFactory,在其中可以配置多个数据源
2011年11月4日
16
3、程序中访问数据源 按照上述修改两个配置文件,然后将MySql的驱动放 到C:\Tomcat 5.5\common\lib目录下,
如果是直接通过JDBC访问数据库,也可以将 驱动放在应用的WEB-INF\lib下面。 同时在JSP文件中要导入一些必要的包:
<%@ <%@ <%@ <%@ page import="java.util.*"%> page import="java.sql.*"%> page import="javax.sql.*"%> page import="javax.naming.*"%> 参考代码:datasourceTest.jsp
2011年11月4日 17
处理中文编码
在页面中声明中文编码:<%@ page language="java" contentType="text/html;charset=GB2312"%> MySql驱动默认采用ISO-8859-1编码,可以采用下面 两种方法之一 (1)URL改写为: jdbc:mysql://localhost/sql_test?useUnicode =true&characterEncoding=gb2312
2011年11月4日
11Байду номын сангаас
在server.xml中加入定义数据源的元素
参看文件server.xml,配置了数据源后, Tomcat就会把这个数据源绑定到JNDI名称空 间,可以通过查询其中配置的JNDI名字 jdbc/mysql/sql_test就可以获得与数据 库sql_test的连接
2011年11月4日
2011年11月4日
4
程序中使用数据源的方式: 在程序中直接创建该类的对象,然后使用该对 象获得数据库的连接 参考代码:DirectUseDataSource.java 使用JNDI注册数据源对象为一个命名服务,然 后在程序中使用JNDI提供的接口按照名称查 找得到对应的数据源
2011年11月4日
5
数据源和连接池
在DataSource中事先建立了多个数据库的连 接,这些数据库的连接保存在连接池中.JAVA 程序访问数据库时,只需从连接池中取出空闲 状态的数据库连接,当程序访问数据库结束,在 将数据库连接放回连接池,这样可以提高访问 数据库的效率.
2011年11月4日
6
数据源和JNDI资源
高级数据库的应用
2011年11月4日
1
本节课的内容:
数据源简介 配置数据源
存取二进制文件
2011年11月4日
2
1、数据源简介
数据库连接的建立和关闭是非常耗费系统资源 的操作,通过DriverManager创建的连接对象 均对应一个物理数据库连接,每次操作都打开 一个物理连接,使用完后再关闭,造成系统性能 低下. 解决方案是在应用程序启动时建立足够的数据 库连接,并将这些连接组成一个连接池,由应用 程序动态的对池中的连接记性申请、使用和释 放
2011年11月4日
21
5.1数据库分页显示的解决方案
一种方案是多次查询数据库,每次根据当前页 号使用游标定位结果集中页面对应的数据行, 读取并显示该页面的数据,然后关闭数据库连 接,将其他数据予以抛弃。在随后的分页显示 的实现过程中,我们使用JDBC2. 0中的结果 集对象的方法来控制数据库的显示,它独立于 任何数据库管理系统,不但具有通用性,而且 提高了海量数据库查询的速度。
2011年11月4日
19
4、存取二进制文件
在数据库编程中,往往需要把二进制数据保存到数据库 将二进制文件存储到数据库的过程:首先打开文件, 将文件内容读到缓冲区,然后建立数据库的连接,创 建更新数据的JDBC语句对象,使用该语句对象读取缓 冲区的数据,并执行更新。 参考代码:UploadImage.java 从数据库读取二进制文件的过程:先建立数据库的连 接,创建查询数据的JDBC语句对象,使用该语句对象 执行查询SQL语句,读取返回结果的二进制字段,并 将数据流保存到文件中。 参考代码:showImage.jsp
DataSource对象由Tomcat提供,因此不用在 程序中采用创建一个实例的方式来生成 DataSource对象,但需要采用JAVA的一个技 术JNDI来获得DataSource对象的引用. JNDI是一种将对象和名字绑定的技术,对象工 厂负责生产对象,这些对象都和唯一名字绑定, 外部程序可以通过名字来获得某个对象的引用.
2011年11月4日
20
5、分页显示
在WEB应用系统开发的过程中,必然会涉及到 数据库的查询和显示的问题,如果数据量比较少, 不需要考虑分页,直接输出到浏览器端就可以了。 但是,如果数据量非常大,比如在电子商务系统 中涉及的数据量可能会达到成千上万条的规模, 如此多的数据显示在一个页面中效率是非常低下 的,特别是当多个用户同时访问数据库时会使服 务器的负载过重。因此,需要采用分页显示技术 将数据库中符合条件的数据逐页显示给用户。
2011年11月4日 14
在web.xml中加入数据源引用的元素 <resource-ref> <description>DataSource</description> <res-ref-name>jdbc/mysql/sql_test </res-ref-name> <res-type>javax.sql.DataSource </res-type> <res-auth>Container</res-auth> </resource-ref>
2011年11月4日
7
在Java.naming包中提供了Context接口,该 接口提供了将对象和名字绑定,以及通过名字 检索对象的方法. Context接口的主要方法: bind(String name,Object obj)将对 象与一个名字绑定 lookup(String name)返回与指定名字 绑定的对象
2011年11月4日
18
(2)如果在设定连接数据库的URL时,没有设定字符编 码,则首先应知道JDBC驱动程序所使用的默认字符编 码,然后对从数据库中取出的数据进行字符编码转换: String name=rs.getString(1); name=new String(name.getBytes(“ISO-88591”),gb2312”);
12
在其中定义了<Resource>元素,其属性: Name指定资源的JNDI名字 Auth指定管理Resource的Manager,它有两个可选 值:Container和Application, Container表 示由容器来创建和管理Resource, Application 表示由Web应用来创建和管理Resource Type指定Resource所属的Java类 factory指定生成DataResource的factory类名 maxActive指定数据库连接池中处于活动状态的数 据库连接的最大数目,若为0则不限制
2011年11月4日
27
分页数据的包装
为了使程序具有更好的扩展性,我们把分页控 制类Pagination定义为抽象的,其中包含一 个抽象的方法packResultSet()用来把结果 集包装为业务对象集合。针对不同的需要分页 显示的业务数据,只需编写不同的子类继承 Pagination类并实现方法 packResultSet(),就能在视图上显示不同 的业务数据。下面是针对数据库中学生的业务 数据编写了子类并实现了方法。
2011年11月4日
22
一种方案是首先获得查询请求的行范围参 数,使用数据库产品提供的定位行集的SQL 语句返回特定行的数据。但是,不同的数 据库对应的定位行集的SQL语句的语法差异 是很大的,例如在MySQL数据库中使用 select * from tablename limit start,number 来返回从第start+1条 记录开始的number条记录。
2011年11月4日
24
分页控制Bean
用Pagination类来处理分页所需要的一些关键的控制数 类来处理分页所需要的一些关键的控制数 据。 private String sql属性接收数据库查询语句; 属性接收数据库查询语句; 属性接收数据库查询语句 private int rowsPerPage属性接收每页显示的行数; 属性接收每页显示的行数; 属性接收每页显示的行数 private int rowsCount存放根据 存放根据sql查询语句调用 存放根据 查询语句调用 方法countRows()计算出来的总行数; 计算出来的总行数; 方法 计算出来的总行数 private int pagesCount存放根据总行数和每页的 存放根据总行数和每页的 行数调用方法countPages()计算出来的总页数。其中, 计算出来的总页数。 行数调用方法 计算出来的总页数 其中, 在计算总行数的方法countRows()中需要对 中需要对sql查询语 在计算总行数的方法 中需要对 查询语 句作进一步的转换
2011年11月4日
23
页面状态数据封装Bean
为了表示从数据库中取出来的每一条记录的信 息,在分页显示程序的中,我们编写了 DBStudent类,用来封装从数据库查找到的 业务逻辑数据, DBStudent 类的属性对应 于数据库中记录的字段,从数据库中提取到的 每一条记录的详细信息都会封装到 DBStudent 对象之中。同时,在DBStudent 类中也提供了对这些属性的存取方法。
2011年11月4日
3
JDBC2.0提供了javax.sql.DataSource 接口,负责建立与数据库的连接,在应用程序 中访问数据库不必编写连接数据库的代码,可 以直接从数据源获得数据库的连接. 在JDBC的驱动中有实现该接口的实现类: Com.mysql.jdbc.jdbc2.optional.Mysql DataSource
2011年11月4日
25
int fromPos = sql.indexOf(" from "); countSql = sql.substring(fromPos); countSql = "select count(*) "+ countSql;
2011年11月4日
26
在Pagination类中实现分页显示的核心 方法是public Collection getPage(int page), 用来获得某一特 定页page对应的数据集合。 packResultSet(rs)包装为业务数据对 象的集合并返回。通过这样的处理, 真正 得到所需页的数据,去除多余的数据,达到 节省系统资源,提高性能的效果。
2011年11月4日
15
Description对所引用资源的说明 res-ref-name指定所引用资源的JNDI名字, 与Resource元素中大的name属性对应 res-type指定所引用资源的类的名字,与 Resource元素中大的属性type对应 res-auth指定管理引用资源的Manager,与 Resource元素中的属性auth对应
BasicDataSourceFactory
jdbc/mysql/sql_test
2011年11月4日
10
2、配置数据源
Tomcat提供了一个JNDI命名服务的实现,可以 在server.xml中配置数据源的JNDI命名服务. 步骤如下:
安装DBCP及JDBC驱动 在server.xml中加入定义数据源的元素, 在web.xml中加入数据源引用的元素。
相关文档
最新文档