连接池作用:
每次连接数据库时,都需创建及销毁连接;在频繁访问数据库的情况下,是非常耗费资源的
连接池可以批量创建多个连接,提升性能,避免资源浪费.
我们可以将建立连接和销毁连接封装起来,方便调用
private static ArrayList<Connection> list= new ArrayList(); Class.forName("com.mysql.jdbc.Driver"); for(int i = 0; i < 3; i++) {//批量建立链接 Connection conn = DriverManager.getConnection("jdbc:mysql:///mydb_21", "root", "root"); list.add(conn);//放入集合
取连接:
public Connection getConnection() throws SQLException{//取链接 if(list.size() <= 0){//集合中无可用链接则重新创建 for(int i = 0; i < 3; i++){ Connection conn = DriverManager.getConnection("jdbc:mysql:///mydb_21","root","root"); } } return list.remove(0); }
还连接 :
public void retConnection(Connection conn){//还链接 if(conn != null) list.add(conn); }
整体代码:
import javax.sql.DataSource;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.ArrayList;
import java.util.logging.Logger;
public class Mypool2 implements DataSource{//批量建立 防止重复
//泛型保证只有connection类可被存入集合 取链接时返回的数据用connection类接收时不会报错
private static ArrayList<Connection> list= new ArrayList();
static {
try {
Class.forName("com.mysql.jdbc.Driver");
for(int i = 0; i < 3; i++) {//批量建立链接并放入集合
Connection conn = DriverManager.getConnection("jdbc:mysql:///mydb_21", "root", "root");
list.add(conn);
}
} catch (Exception e){
System.out.println(e.getMessage());
}
}
public Connection getConnection() throws SQLException{//取链接
if(list.size() <= 0){//集合中无可用链接则重新创建
for(int i = 0; i < 3; i++){
Connection conn = DriverManager.getConnection("jdbc:mysql:///mydb_21","root","root");
}
}
return list.remove(0);
}
@Override
public Connection getConnection(String username, String password) throws SQLException {
return null;
}
public void retConnection(Connection conn){//还链接
if(conn != null)
list.add(conn);
}
@Override
public <T> T unwrap(Class<T> iface) throws SQLException {
return null;
}
@Override
public boolean isWrapperFor(Class<?> iface) throws SQLException {
return false;
}
@Override
public PrintWriter getLogWriter() throws SQLException {
return null;
}
@Override
public void setLogWriter(PrintWriter out) throws SQLException {
}
@Override
public void setLoginTimeout(int seconds) throws SQLException {
}
@Override
public int getLoginTimeout() throws SQLException {
return 0;
}
@Override
public Logger getParentLogger() throws SQLFeatureNotSupportedException {
return null;
}
}