使用原因:
用户的每次请求需要向数据库提交数据并且获得连接,如果每次都连接那就需要占用很大的内存资源,奥兵法状态下,连接数据库就会出现问题,所以出现了数据库连接池,来解决高并发的问题。
连接池原理:
数据库连接池负责分配、管理、释放连接,它保证应用程序可以重复使用同一个连接而不需要每次都建立数据库连接,如果数据库连接时间超过设置的最长数据库连接时间会自动释放链接,为了避免因为没有释放链接而导致的数据库连接遗漏,因此,数据库连接池可以明显的提高数据库的连接性能。
数据库连接池在初始化的时候会放入一定数量的连接,这个连接是由最小连接数决定的,就算没有用到这些连接,这个连接也会放在连接池中。如果连接数超过最大连接数,那么会放入队列中等待释放链接再使用。
连接池的优点,也就是为啥要使用连接池?
1、资源重用
2、更快的系统反应速度
3、新的分配方式
4、统一的连接管理,避免数据库连接泄漏
一、数据库池
充当数据库连接池的作用 是否经常适用于遍历 遍历取数据 得用ArrayList集合//集合类型为connection类型 连接池作用就是存放连接
package com.oracle_hyxy.util;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.text.StyledEditorKit.ForegroundAction;
public class pool {
//充当数据库连接池的作用 是否经常适用于遍历 遍历取数据 得用ArrayList集合
//集合类型为connection类型 连接池作用就是存放连接
//
List<poolconnection> pools = new ArrayList<poolconnection>();
{//匿名块 当集合寻访引用数据类型时 存储的不是元素本身,而是一个对象的实例
for (int i=1;i<=5;i++) {
pools.add(new poolconnection());
}
}
poolconnection pss=null;
public poolconnection getpoolconnection() {
for (poolconnection ps:pools) {
//获取没有占用的连接 添加标识 true 或false Boolean
if(!(ps.isIsuse())) {
pss = ps ;
break;
}
}
return pss;
}
public static void main(String args[]) {
try {
pool pool =new pool();
//pc是真正连接数据库的对象嘛
poolconnection ps = pool.getpoolconnection();
Connection conn = ps.getconnection();
Statement st = conn.createStatement();
//sql:
String sql = "select * from tb_user";
ResultSet rs = st.executeQuery(sql);
//处理的代码:
while(rs.next()){
String username = rs.getString("username");
System.out.println("username "+username);
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
二、数据库连接池
存放数据库的连接,以及连接oracle数据库
如果连接被占用 还需要释放占用 为了能够并发访问
package com.oracle_hyxy.util;
import java.sql.Connection;
import java.sql.DriverManager;
public class poolconnection {
private Connection conn=null;
private boolean isuse=false;
public boolean isuse(){//标识连接是否被占用
return isuse;
}
public Connection getConn() {
return conn;
}
public void setConn(Connection conn) {
this.conn = conn;//方便更改使用状态
}
public boolean isIsuse() {
return isuse;
}
public void setIsuse(boolean isuse) {
this.isuse = isuse;
}
{
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection("jabc:oracle:thin:@localhost:1521:orcl", "scott", "tiger");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Connection getconnection() {
return this.conn;
}
}
最后 本次代码均为手写 难免会有错误 如有不足 请多指正 由于是初级实验版本 暂时还未加入一些特殊功能