`
lixucheng
  • 浏览: 80267 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

JSP培训(10)——使用JavaBean封装对数据库的访问、连接池的配置和使用

阅读更多
目标:
l 掌握如何共享连接数据库的代码;
l 掌握PrepareSatement的使用;
l 掌握数据库连接池的配置和使用;
主要内容:
l 通过对数据库的访问过程进行分析,把数据库访问过程封装成DBBean;
l 修改User.java中的根据页码查询用户的方法,使用DBBean完成对数据库的操作;
l 修改User.java中的添加用户信息的方法,使用DBBean完成对数据库的操作;
l 配置数据库连接池;
l 修改DBBean中连接数据库的代码,使用连接池完成连接
1、DBBean的编写
在前面的几讲中,有多个方法连接数据库对数据库进行操作,并且我们编写代码的过程中存在很多复制和粘贴,这意味着在各个方法中有很多代码可以共享。那么在连接数据库的代码中有过程是可以共享的?
对数据库操作的基本过程如下:
l 加载驱动程序;
l 创建连接;
l 编写SQL语句;
l 创建语句对象;
l 执行SQL语句;
l 对结果进行处理;
l 关闭相关对象。
在上面的过程中,很多操作都是相同的,不同的方面包括:不同的功能需要编写不同的SQL语句,对结果的处理。
对这个过程进行封装,得到下面的代码(封装的方式有很多种):
package javabean;
import java.sql.*;
import java.util.*;
public class DBBean {
private Connection con;
private PreparedStatement stmt;
private ResultSet rs;
// 获取连接对象
public Connection getConnection() throws Exception{
if(con == null){
// 指出连接数据库所需要的驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
// 建立与数据库之间的连接
con = DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.0.170:1521:fhdn", "scott",
"tiger");
}
return con;
}
// 创建语句对象
public PreparedStatement getStatement(String sql) throws Exception{
con = getConnection();
stmt = con.prepareStatement(sql);
return stmt;
}
// 执行有结果集的查询
public ResultSet executeQuery(String sql,ArrayList paras) throws Exception{
stmt = getStatement(sql);
if (paras != null) {
Object o[] = paras.toArray();
for (int i = 0; i < o.length; i++) {
if (o[i] instanceof String) {
stmt.setString(i + 1, (String) o[i]);
}
}
}
return stmt.executeQuery();
}
// 执行没有结果集的查询
public int executeUpdate(String sql,ArrayList paras) throws Exception{
stmt = getStatement(sql);
if (paras != null) {
Object o[] = paras.toArray();
for (int i = 0; i < o.length; i++) {
if (o[i] instanceof String) {
stmt.setString(i + 1, (String) o[i]);
}
}
}
return stmt.executeUpdate();
}
// 关闭对象
public void close(){
try{
rs.close();
}catch(Exception e){}
try{
stmt.close();
}catch(Exception e){}
try{
con.close();
}catch(Exception e){}
}
}
注意:因为采用预编译的语句对象,所以在执行SQL语句的时候需要提供参数,因为参数的个数不定,所以采用ArrayList对象进行封装,而代码中只对String类型的参数进行了处理,如果使用其它类型的参数,需要再编写支持代码。
2、修改getUserByPage方法
使用DBBean中方法的基本过程如下:
l 创建DBBean的对象;
l 编写SQL语句;
l 封装SQL语句需要的参数;
l 执行SQL语句;
l 关闭对象。
public ArrayList getUserByPage(int pageNo) {
int number = 10;
// 每一页显示的记录数
int begin = (pageNo * number) - 9;
int end = pageNo * number;
int index = 1;
DBBean db = new DBBean();
// 要返回的结果对象
ArrayList users = new ArrayList();
String sql = "select * from usertable";
ResultSet rs;
try{
rs = db.executeQuery(sql,null);
while (rs.next()) {
// 在begin之前的记录是不显示的
if (index < begin) {
index++;
continue;
}
// 在end之后的记录也不显示
if (index > end)
break;
index++;
String username = rs.getString(1);
String userpass = rs.getString(2);
// java.util.Date birthday = rs.getDate(3);
// int age = rs.getInt(4);
User user = new User();
user.setUsername(username);
user.setUserpass(userpass);
users.add(user);
}
}catch(Exception e){
e.printStackTrace();
}finally{
db.close();
}
return users;
}
3、修改addUser方法
以addUser方法为例介绍具有参数的SQL语句的执行。
基本访问过程与2中介绍的相同,修改后的addUser方法的代码如下:
public boolean addUser() {
DBBean db = new DBBean();
String sql = "insert into usertable values(?,?)";
ArrayList<String> paras = new ArrayList<String>();
paras.add(username);
paras.add(userpass);
int n=0;
try{
n = db.executeUpdate(sql,paras);
}catch(Exception e){
System.out.println(e.toString());
}
db.close();
boolean b; // 表示添加成功与否
if (n > 0)
b = true;
else
b = false;
return b;
}
4、使用连接池的好处
在前面的例子中,对于每个用户的每次访问都要先创建数据库连接,使用完之后释放连接。如果能够让用户多次访问之间共享数据库连接,则可以大幅度提供访问的效率。可以使用数据库连接处完成连接的共享,在服务器启动的时候,创建多个连接,如果用户需要访问数据库,直接从连接池中得到一个连接使用,使用完之后直接放回连接池。
使用连接池的另外一个好处是,如果客户端太多,连接池可以通过控制连接的数量来保护数据库服务器,不会让数据库的响应变得非常缓慢,从而影响服务器的性能。
5、Tomcat中连接池的配置
连接池的配置包括3个部分:
l 把数据库JDBC驱动程序放到Tomcat安装目录的lib下面。有些版本的Tomcat应该放在安装目录的common/lib下面。
l 配置安装目录下的conf/server.xml
打开server.xml文件,在</host>之前添加如下代码:
<Context path="/ch10" docBase="ch10"
debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="scott"
password="tiger"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@myserver:1521:mydb"/>
path是应用的访问路径,docBase是应用的根目录,Resource其他红色部分分别是用户名、口令、驱动程序和url。
</Context>
l 配置工程的web.xml文件
在web.xml中添加如下代码。注意:元素res-ref-name的值应该和前面配置的Resource的名字相同。
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
6、在Java代码中使用连接池
修改DBBean.java中的getConnection方法,修改后的代码如下:
public Connection getConnection() throws Exception{
if (con == null) {
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/TestDB");
con = ds.getConnection();
}
return con;
}
注意:在类头需要引入javax.sql包和javax.naming包。
7、运行代码进行测试。

参考教材:Java Web程序设计基础教程

分享到:
评论

相关推荐

    基于Servlet+JSP+JavaBean的新生管理系统源码+数据库+部署说明(javaweb高分课设).zip

    -运用dbutil.jar包一键封装表单数据到bean对象中,简化对数据库增、删、改、查的代码 -运用fileupload.jar包上传文件 -运用poi.jar包解析EXCEL文件 -AJAX异步更新 -运用json-lib.jar包将数据转化为JSON格式 -...

    javaWEB项目——在线图书馆管理系统

    2.servlet用作控制器,使用javabean技术对数据进行封装。 3.数据库采用MySQL,利用c3p0连接池进行数据库的连接,分别建users table与books table ; 4.系统具备分页功能,且用户可以进行模糊书目查询。

    news:基于JSP+Servlet+JavaBean+JDBC(自封装的)的新闻信息发布系统

    项目: 新闻信息发布系统 Java Web项目,2015年4月应Java Web课程要求而设计的一个新闻信息系统。 主要使用JSP+Servlet+JavaBean+JDBC+DBCP技术实现;本人封装了JDBC,增加DBCP数据库连接池,从而可以控制事务。

    JAVA WEB典型模块与项目实战大全

    13.2 数据库连接池  13.3 commons dbutils组件  13.4 小结  第14章 ajax技术jquary框架的经典应用  14.1 jquery框架的简单应用  14.2 利用jquery框架实现的经典运用  14.3 实现仿google suggest功能...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    我们掌握了数据库及其应用技术、数据库原理、计算机网络技术等课程,对数据库的设计、应用、维护及局域网的组成有了深刻的认识与一定的动手实践能力,考取了信息处理、程序设计、数据库技术等国家IT认证。...

    商城之家JSP商城基于jsp+mysql开发

    据源连接池机制,整个系统完全贯穿JAVA面向对象的概念,全面完整地实现了JAVA的封装性 ,继承性,多态性的三大特征,完全按照J2EE企业级网络应用程序的开发方案设计和开发, 所有的繁重的计算和处理都由服务器端处理...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    12.4.2 配置数据库连接池 12.4.3 使用JNDI 12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和...

    商城之家jsp网店系统

    据源连接池机制,整个系统完全贯穿JAVA面向对象的概念,全面完整地实现了JAVA的封装性 ,继承性,多态性的三大特征,完全按照J2EE企业级网络应用程序的开发方案设计和开发, 所有的繁重的计算和处理都由服务器端处理...

    java web开发技术大全

    4.2.1 配置数据库连接池 4.2.2 数据库连接池的应用 4.2 -3实例:用doGet方法处理客户端请求 4.2.4 实例:用doPost方法处理客户端请求 4.2.5 实例:用service方法处理客户端请求 4.2.6 实例:初始化...

    JSP商城之家商城企业版

    据源连接池机制,整个系统完全贯穿JAVA面向对象的概念,全面完整地实现了JAVA的封装性 ,继承性,多态性的三大特征,完全按照J2EE企业级网络应用程序的开发方案设计和开发, 所有的繁重的计算和处理都由服务器端处理...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    12.4.2 配置数据库连接池 12.4.3 使用JNDI 12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.4.2 配置数据库连接池 12.4.3 使用JNDI 12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    12.4.2 配置数据库连接池 12.4.3 使用JNDI 12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和...

    java web技术开发大全(最全最新)

    4.2.1 配置数据库连接池 4.2.2 数据库连接池的应用 4.2 -3实例:用doGet方法处理客户端请求 4.2.4 实例:用doPost方法处理客户端请求 4.2.5 实例:用service方法处理客户端请求 4.2.6 实例:初始化(init)...

    java面试题

    答:1:封装:通过定义类并且给类的属性和方法加上访问控制 2:继承:子类继承父类,子类可以拥有父类中已定义的方法,并且子类可以修改父类中的方法使其更适合特殊需求。 3:多台:不同对象对统一消息作出不同...

    JSP企富商贸网开发

    据源连接池机制,整个系统完全贯穿JAVA面向对象的概念,全面完整地实现了JAVA的封装性 ,继承性,多态性的三大特征,完全按照J2EE企业级网络应用程序的开发方案设计和开发, 所有的繁重的计算和处理都由服务器端处理...

    student-score:基于jsp+servlet技术的简单选课小项目

    连接池使用了c3p0。参数可以在c3p0-config.xml中配置。​ service:业务层,处理业务​ servlet:web层,获取页面数据,请求分发转向。baseServlet作为最基础的servlet,利用反射技术,使得servlet开发方便快捷了许

    商城之家JSP商城企业版 v7.0

    数据的存储和持久化由HIENATER持久层实现,数据库采用MYSQL,数据源采用数据源连接池机制, 整个系统完全贯穿JAVA面向对象的概念,全面完整地实现了JAVA的封装性,继承性,多态性的三大特征,完全按照J2EE企业级网络...

    JAVA项目开发全程实录(含电子书和所有源代码)

    《Java项目开发全程实录》这一本书从开发背景、需求分析、系统功能分析、数据库分析、数据库建模、网站开发和网站发布或者程序打包与运行,每一过程都进行了详细的介绍。 目 录 第1章 进销存管理系统(Swing+SQL ...

Global site tag (gtag.js) - Google Analytics