关于数据连接池的使用
1、原始的数据库连接过程
加载驱动,jdbc连接数据库,访问数据,执行SQL
缺点:延时,反复的分配回收资源
DriverManager.registerDriver(new SQLServerManager());
Connection con=DriverManager.getConnection("url","username","pwd");
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("sql");
rs.next();
rs.close();
stmt.close();
conb.close();
2、数据库连接的池化管理
设计资源管理策略,实现对资源的高效分配与回收,
- 编写class 实现DataSource接口,
- 在class构造器一次性创建10个连接,将连接保存LinkedList中
- 实现getConnection 从 LinkedList中返回一个连接
- 提供将连接放回连接池中方法
public class MyDataSource implements DataSource{
//链表 --- 实现栈结构
private LinkedList<Connection> dataSources =new LinkedList<Connection>();
//初始化连接数量
public MyDataSource(){
//一次性创建10个连接
for(int i=0;i<10;i++){
try{
//1、装载sqlserver驱动对象
DriverManager.registerDriver(new SQLServerDriver());
//2、通过JDBC建立数据库连接
Connection con =DriverManager.getConnection("url", "sa","123");
//3、将连接加入连接池中
dataSources.add(con);
}catch(Exception e){
e.printStackTrace();
}
}
}
@Override
publicConnection getConnection() throws SQLException{
//取出连接池中一个连接
finalConnection conn =dataSources.removeFirst();
// 删除第一个连接返回
return conn;
}
//将连接放回连接池
publicvoid releaseConnection(Connection conn){
dataSources.add(conn);
}
}
//查询所有用户
Public void FindAllUsers(){
//1、使用连接池建立数据库连接
MyDataSource dataSource = new MyDataSource();
Connection conn =dataSource.getConnection();
//2、创建状态
Statement state =con.createStatement();
//3、查询数据库并返回结果
ResultSet result =state.executeQuery("select * from users");
//4、输出查询结果
while(result.next()){
System.out.println(result.getString("email"));
}
//5、断开数据库连接
result.close();
state.close();
//6、归还数据库连接给连接池
dataSource.releaseConnection(conn);
}