JavaWeb复习二----Servlet配置数据库连接池
来源:互联网 发布:透明屏幕软件下载 编辑:程序博客网 时间:2024/05/17 22:28
dbcp数据库连接池需要的jar包:https://pan.baidu.com/s/1i4PiWCl
1、数据库连接基础
数据库连接池基础主要包括以下三个方面的内容:数据库连接池的基本概念、数据库连接池的工作原理、Java开源的连接池。
(1)数据库连接池的基本概念
DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的Web应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。因此,数据库连接池正是针对这个问题提出来的。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不再是重新建立一个数据库连接;释放空闲时间超过最大空闲时间的数据库连接,以避免因为没有释放数据库连接而引起的数据库连接遗漏。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保持至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数时,这些请求将被加入到等待队列中。
(2)数据库连接池的工作原理
下面请看一个具体的数据库连接池工作原理示意图:
driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/login?useSSL=falseusername=rootpassword=12345maxActive=5
(3)Java开源的连接池
由于Java的开源特性,产生了许多Java开源的连接池。例如以下数据库连接池:Jakarta DBCP、C3P0、Proxool、DBPool等。
其中,Jakarta DBCP具体是:一个依赖Jakarta commons-pool对象池的数据库连接池,DBCP可以直接第在应用程序中使用。这也是本文所要介绍的技术要点。
C3P0具体是:一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection池和Statement池的DataSources对象。
(4)如何连接:
创建dbcp properties:
driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/login?useSSL=falseusername=rootpassword=12345maxActive=5
创建DataSourceUtil
public class DataSourceUtils { private static DataSource ds; static{ InputStream in=DataSourceUtils.class.getClassLoader().getResourceAsStream("dbcp.properties"); Properties properties=new Properties(); try { properties.load(in); ds=new BasicDataSourceFactory().createDataSource(properties); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public static DataSource getDataSource(){ return ds; }}
创建dao实现类使用DataSourceUtil
package com.lrq.dao.daoImpl;import com.lrq.dao.UserDao;import com.lrq.entity.User;import com.lrq.util.DataSourceUtils;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import org.apache.commons.dbutils.handlers.BeanListHandler;import java.sql.SQLException;import java.util.List;public class UserDaoImpl implements UserDao { @Override public boolean add(User user){ QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "insert into user(name,pwd) values(?,?)"; int rs= 0; try { rs = qr.update(sql,"sss","345"); } catch (SQLException e) { e.printStackTrace(); } if(rs>0){ return true; }else { return false; } } @Override public List<User> queryAll() { QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "select * from user"; List<User> list=null; try { list=qr.query(sql,new BeanListHandler<User>(User.class)); } catch (SQLException e) { e.printStackTrace(); } return list; } @Override public User queryByName(String na) { QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "select * from user where name=?"; User user= null; try { user = qr.query(sql,new BeanHandler<User>(User.class),na); } catch (SQLException e) { e.printStackTrace(); } return user; } @Override public User query(String na, String pwd){ QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "select * from user where name=? and pwd=?"; User user= null; try { user = qr.query(sql,new BeanHandler<User>(User.class),na,pwd); } catch (SQLException e) { e.printStackTrace(); } return user; } @Override public boolean updateUser(User user){ QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "update user set pwd=? where name=?"; int rs= 0; try { rs = qr.update(sql,user.getPassWord(),user.getUsername()); } catch (SQLException e) { e.printStackTrace(); } if(rs>0){ return true; }else { return false; } } @Override public boolean deleteUser(User user){ QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "delete from user where name=?"; int rs= 0; try { rs = qr.update(sql,user.getUsername()); } catch (SQLException e) { e.printStackTrace(); } if(rs>0){ return true; }else { return false; } }}
- JavaWeb复习二----Servlet配置数据库连接池
- Servlet配置数据库连接池
- JavaWeb复习一----Servlet
- javaWeb 复习系列(二)
- 1.JavaWeb 复习之servlet
- Servlet 3.0 proxool 配置 数据库连接池
- javaweb之数据库连接池
- JavaWeb学习(二):Servlet
- JavaWeb(二)Servlet编写
- JavaWeb学习二(Servlet入门)
- JavaWeb开发之Servlet(二)
- Servlet之javaweb应用(二)
- javaWeb 简单注册登录(含数据库连接) -- (二) MySQL数据库配置和连接
- SERVLET复习笔记(二)
- Tomcat5.0数据库连接池配置二
- servlet复习(二)HTTP Servlet API
- JavaWeb-Maven Profile切换数据库连接配置
- 如何tomcat下配置jsp、servlet.JavaBean.数据库连接池.虚拟目录
- 暂停更新博客(1705-1711)须知
- 图解http学习笔记5.与HTTP协作的web服务器
- Github代码仓创建及更新
- 文档特征提取
- LinkedList源码阅读笔记
- JavaWeb复习二----Servlet配置数据库连接池
- (转)35 个 Java 代码性能优化总结!搞Android的你更需要
- linux的rpm命令的简单使用
- 反轉鏈錶
- # leetcode解题报告9. Palindrome Number
- javaweb学习笔记(八)-带验证码的简单登录
- 采用native2ascii工具将中文字符的资源文件转换为Unicode代码格式的文件
- 用鼠标点击画一个五边形
- wav文件分析