pool.addLast(con);
}else{
try{
//4.2关闭
current_count--;
con.close();
}catch(SQLExceptione){
thrownewRuntimeException(e);
}
}
}
publicstaticvoidmain(String[]args)throwsSQLException{
MyPoolpool=newMyPool();
System.out.println("当前连接:
"+pool.current_count);//3
//使用连接
pool.getConnection();
pool.getConnection();
Connectioncon4=pool.getConnection();
Connectioncon3=pool.getConnection();
Connectioncon2=pool.getConnection();
Connectioncon1=pool.getConnection();
//释放连接,连接放回连接池
//pool.realeaseConnection(con1);
/*
*希望:
当关闭连接的时候,要把连接放入连接池!
【当调用Connection接口的close方法时候,希望触发pool.addLast(con);操作】
*把连接放入连接池
*解决1:
实现Connection接口,重写close方法
*解决2:
动态代理
*/
con1.close();
//再获取
pool.getConnection();
System.out.println("连接池:
"+pool.pool.size());//0
System.out.println("当前连接:
"+pool.current_count);//3
}
}
代理的总结:
(了解会用)
使用代理,可以在不实现接口的情况,对接口的方法进行扩展,添加额外的用户需要的业务逻辑!
2.开源的连接池技术
概述:
Sun公司约定:
如果是连接池技术,需要实现一个接口!
javax.sql.DataSource;
连接池:
DBCP
C3P0
2.1DBCP连接池:
●DBCP是Apache软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个jar文件:
•Commons-dbcp.jar:
连接池的实现
•Commons-pool.jar:
连接池实现的依赖库
●Tomcat的连接池正是采用该连接池来实现的。
该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。
●核心类:
BasicDataSource
●使用步骤
•引入jar文件
●commons-dbcp-1.4.jar
●commons-pool-1.5.6.jar
publicclassApp_DBCP{
//1.硬编码方式实现连接池
@Test
publicvoidtestDbcp()throwsException{
//DBCP连接池核心类
BasicDataSourcedataSouce=newBasicDataSource();
//连接池参数配置:
初始化连接数、最大连接数/连接字符串、驱动、用户、密码
dataSouce.setUrl("jdbc:
mysql:
///jdbc_demo");//数据库连接字符串
dataSouce.setDriverClassName("com.mysql.jdbc.Driver");//数据库驱动
dataSouce.setUsername("root");//数据库连接用户
dataSouce.setPassword("root");//数据库连接密码
dataSouce.setInitialSize(3);//初始化连接
dataSouce.setMaxActive(6);//最大连接
dataSouce.setMaxIdle(3000);//最大空闲时间
//获取连接
Connectioncon=dataSouce.getConnection();
con.prepareStatement("deletefromadminwhereid=3").executeUpdate();
//关闭
con.close();
}
@Test
//2.【推荐】配置方式实现连接池,便于维护
publicvoidtestProp()throwsException{
//加载prop配置文件
Propertiesprop=newProperties();
//获取文件流
InputStreaminStream=App_DBCP.class.getResourceAsStream("db.properties");
//加载属性配置文件
prop.load(inStream);
//根据prop配置,直接创建数据源对象
DataSourcedataSouce=BasicDataSourceFactory.createDataSource(prop);
//获取连接
Connectioncon=dataSouce.getConnection();
con.prepareStatement("deletefromadminwhereid=4").executeUpdate();
//关闭
con.close();
}
}
配置方式实现DBCP连接池,配置文件中的key与BaseDataSouce中的属性一样:
db.properties
url=jdbc:
mysql:
///jdbc_demo
driverClassName=com.mysql.jdbc.Driver
username=root
password=root
initialSize=3
maxActive=6
maxIdle=3000
2.2C3P0连接池:
C3P0连接池:
最常用的连接池技术!
Spring框架,默认支持C3P0连接池技术!
C3P0连接池,核心类:
CombopooledDataSourceds;
使用:
1.下载,引入jar文件:
c3p0-0.9.1.2.jar
2.使用连接池,创建连接
a)硬编码方式
b)配置方式(xml)
publicclassApp{
@Test
//1.硬编码方式,使用C3P0连接池管理连接
publicvoidtestCode()throwsException{
//创建连接池核心工具类
ComboPooledDataSourcedataSource=newComboPooledDataSource();
//设置连接参数:
url、驱动、用户密码、初始连接数、最大连接数
dataSource.setJdbcUrl("jdbc:
mysql:
//localhost:
3306/jdbc_demo");
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setUser("root");
dataSource.setPassword("root");
dataSource.setInitialPoolSize(3);
dataSource.setMaxPoolSize(6);
dataSource.setMaxIdleTime(1000);
//--->从连接池对象中,获取连接对象
Connectioncon=dataSource.getConnection();
//执行更新
con.prepareStatement("deletefromadminwhereid=7").executeUpdate();
//关闭
con.close();
}
@Test
//2.XML配置方式,使用C3P0连接池管理连接
publicvoidtestXML()throwsException{
//创建c3p0连接池核心工具类
//自动加载src下c3p0的配置文件【c3p0-config.xml】
ComboPooledDataSourcedataSource=newComboPooledDataSource();//使用默认的配置
//获取连接
Connectioncon=dataSource.getConnection();
//执行更新
con.prepareStatement("deletefromadminwhereid=5").executeUpdate();
//关闭
con.close();
}
}
2.3优化
项目,连接的管理,交给连接池!
3.分页技术
分页技术:
JSP页面,用来显示数据!
如果数据有1000条,分页显示,每页显示10条,共100页;好处:
利于页面布局,且显示的效率高!
分页关键点:
1.分页SQL语句;
2.后台处理:
dao/service/servlet/JSP
实现步骤:
1.环境准备
a)引入jar文件及引入配置文件
i.数据库驱动包
ii.C3P0连接池jar文件及配置文件
iii.DbUtis组件:
QueryRunnerqr=newQueryRuner(dataSouce);
qr.update(sql);
b)公用类:
JdbcUtils.java
2.先设计:
PageBean.java
3.Dao接口设计/实现:
2个方法
4.Service/servlet
5.JSP
作业:
需求:
自拟
要求功能:
1.列表展示、分页【必须有】
2.注册、登陆
a)登陆后,进入第1步骤的列表页面(分页)
b)注册成功,跳转到登陆页面,让用户登陆
3.扩展
a)对列表数据修改
b)对列表数据删除
c)新增数据
3.3号5.30后提交。