连接池

为什么要创建连接池

当用户需要访问数据库的时候,需要创建和数据库的连接,使用完毕后需要销毁连接,创建和销毁是需要时间的,为了减少这些时间的消耗,我么可以创建连接池

连接池是什么

连接池是把和数据库的连接提前创建,保存在内存中,当用户需要访问数据库的时候,就从连接池获得连接,使用完毕后就将连接归还连接池,通过这样的方式,减少创建连接和销毁连接的时间消耗

在网上也有一些开源的连接池如:Druid、C3P0,这些连接池可以通过手动配置参数和通过配置文件的方式,很方便的使用连接池

创建连接池工具类

package com.itheima.datasource.dome1;

//自定义连接池

import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import javax.sql.DataSource;

import com.itheima.jdbc.utils.JDBCuitel;

public class MyDataSource implements DataSource {
	
	
	private List<Connection> connList = new ArrayList<Connection>();
	//	将一些连接存入到内存中,可以定义一个集合,用于存储连接对象
	
	//创建连接并保存到集合中
	public MyDataSource() {
		for(int i =1;i<=3;i++) {
			connList.add(JDBCuitel.getconnection());
		}
		
	}
	//定义一个归还连接的方法,将用户使用后的连接返回连接池
	public void addBack(Connection conn) {
		connList.add(conn);
	}
	
	@Override
	public PrintWriter getLogWriter() throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getLoginTimeout() throws SQLException {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Logger getParentLogger() throws SQLFeatureNotSupportedException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void setLogWriter(PrintWriter arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public void setLoginTimeout(int arg0) throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean isWrapperFor(Class<?> iface) throws SQLException {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public <T> T unwrap(Class<T> iface) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
	
	@Override
	public Connection getConnection() throws SQLException {
		// TODO Auto-generated method stub
		Connection conn = connList.remove(0);
		return conn;
	}
	//获取连接池的方法,通过调用这个方法,将连接池中的连接返回给用户

	@Override
	public Connection getConnection(String arg0, String arg1) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}

}

创建连接池测试类

package com.itheima.datasource.dome1;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.junit.Test;

public class MyDataSource_ceshi {
	
	@Test
	public void demo1() {
		PreparedStatement pstmt=null;
    	Connection conn=null;
    	ResultSet rs=null;
    	MyDataSource lian=null;
    	
    	try {
    		lian = new MyDataSource();//new一个连接池
    		conn=lian.getConnection();//获取连接池中的一个连接
    		String sql="select *  from user";
    		pstmt=conn.prepareStatement(sql);//预编译
    		rs=pstmt.executeQuery();//将预编译的SQl语句提交,并且返回数据集
    		while(rs.next()) {
    			System.out.println(rs.getInt("id")+" "+rs.getString("username")+" "+rs.getDouble("money"));
    		}
    		
    	}catch(Exception e) {
    		e.printStackTrace();
    	}finally {
    		if(rs!=null) {
    			try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    		}
    		if(pstmt!=null) {
    			try {
					pstmt.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    		}
    		if(conn!=null) {
    			lian.addBack(conn);//将连接归还连接池
    		}
    	}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值