数据库连接的步骤:
加载驱动类,创建连接,创建sql语句,执行sql语句,关闭资源。
数据库连接池的实现原理:
先在池中创建一些连接(connection),等待线程需要的时候直接拿,缩短创建的时间,提高效应速度,使用完之后再放入池中,但并没有真正的关闭资源,等待下一次任务获取。
简单的实现>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1).初始化连接池,以达到最小的连接数。
2).创建连接
3). 获取连接
4).关闭连接(如果池中的连接数超过连接池中的最大值,关闭连接,否则把链接放到池中)
package orm.pool;
import orm.core.DBManager;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* @Description: TODO
* @Author: 13394
* @CreateDate: 2018/11/25 12:31
*/
public class ConnectionPool {
private List<Connection> list = null; //方法连接对象
private static int POOL_MIN = DBManager.getConf().getPoolMin(); //存放最小连接数
private static int POOL_MAX = DBManager.getConf().getPoolMax(); //存放最大连接数
public ConnectionPool() {
initPool();
}
/**
* @return void
* @Author zhangfu
* @Description 初始化连接池,使池中的连接数达到最小值
* @Date 12:34 2018/11/25
* @Param []
*/
public void initPool() {
if (null == list) {
list = new ArrayList<Connection>();
}
if (list.size() < ConnectionPool.POOL_MIN) {
list.add(createConn()) ;
System.out.println("初始化话连接数为:" + list.size());
}
}
/**
* @return java.sql.Connection
* @Author zhangfu
* @Description创建连接
* @Date 12:38 2018/11/25
* @Param []
*/
public Connection createConn() {
try {
Class.forName(DBManager.getConf().getDriver());
return DriverManager.getConnection(DBManager.getConf().getUrl(), DBManager.getConf().getUsername(), DBManager.getConf().getPassword());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* @return java.sql.Connection
* @Author zhangfu
* @Description 从池中获得一个连接
* @Date 12:43 2018/11/25
* @Param []
*/
public synchronized Connection getConn() {
int last_index = list.size() - 1;
Connection conn = list.get(last_index);
list.remove(last_index);
return conn;
}
/**
* @return void
* @Author zhangfu
* @Description 把连接放回到池中
* @Date 12:46 2018/11/25
* @Param []
*/
public void close(Connection conn) {
if (list.size() > ConnectionPool.POOL_MAX) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} else {
list.add(conn);
}
}
}