第三十四章 创建链接池来实现链接的复用

转载 2012年03月24日 00:42:21


使用链接池来获取链接

public static void main(String[] args) throws SQLException{
		for(int i=0;i<20;i++){
			Connection conn = JdbcUtilsPool.getConnection();
			System.out.println(conn);
			JdbcUtilsPool.free(null, null, conn);
		}
	}


获取连接和释放连接

package cn.itcast.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 注册驱动 返回Connection
 * @author Administrator
 *
 */
public class JdbcUtilsPool {
	private static MyDataSource myDataSource = null;
	private JdbcUtilsPool(){
		
	}
	static{
		try {
			Class.forName("com.mysql.jdbc.Driver");
			myDataSource = new MyDataSource();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	/*获得链接,从池子中取*/
	public static Connection getConnection() throws SQLException{
		return  myDataSource.getConnection();
	}
	public static void free(ResultSet rs, Statement st, Connection conn){
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				if(st!=null){
					try {
						st.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}finally{
						if(conn != null){
							//conn.close();
							myDataSource.free(conn); //释放链接不是真的释放,而是放回池子里
						}
					}
				}
			}
		}
	}
	
}



连接池


package cn.itcast.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;

public class MyDataSource {
	
	private LinkedList<Connection> connectionsPool = new LinkedList<Connection>(); //连接池
	private static String username = "mysqlroot";
	private static String password = "mysqlroot";
	private static String url = "jdbc:mysql://localhost:3306/db_cityinfo";
	private static int initCount = 5; //初始链接数量
	private static int maxCount = 10;  //最大链接数量
	private static int currentCount = 0;  //当前已创建的链接数量
	
	/*创建初始链接池*/
	public MyDataSource(){
		for(int i=0; i<initCount; i++){
			try {
				this.connectionsPool.addLast(this.createConnection()); //新链接放到最后
				this.currentCount++;
			} catch (SQLException e) {
				throw new ExceptionInInitializerError(e);
			}
		}
	}
	
	/*从链接池取出链接*/
	public Connection getConnection() throws SQLException{
		synchronized (connectionsPool) {  //同步
			if(this.connectionsPool.size() > 0){  //如果链接池还有链接,则返回链接,并将链接从池子里移除
				return this.connectionsPool.removeFirst();
			}
			if(this.currentCount < maxCount){ //如果链接池没有链接,则新建链接,最大链接数量不超过限制
				this.currentCount++;
				return this.createConnection();
			}
			throw new SQLException("已没有链接");  //如果链接超过最大数量限制,则返回错误
		}
	}
	
	/*释放链接,把链接放回池子里*/
	public void free(Connection conn){  
		this.connectionsPool.addLast(conn);
	}
	
	/*新建链接*/
	private Connection createConnection() throws SQLException{
		return DriverManager.getConnection(url,username,password);
	}
	
	
}



相关文章推荐

通过动态代理(Proxy)实现的数据库连接池的创建连接与归还链接的操作的简单的实现流程

package tk.dong.connection.util; import java.io.IOException; import java.io.InputStream; import jav...

redis哨兵链接池java实现

通过创建SQL Server 2005到 Oracle10g 的链接服务器实现异构数据库数据转换方案

1、新建链接服务器的方法 在图1中选中“链接服务器”,右键选择“新建链接服务器”,如图2,配置相关参数。2、配置相关参数在“常规”选项中,填写“链接服务器名称”,访问接口选中“ Microsoft O...

MVC+数据库链接池功能实现

  • 2012-04-26 20:33
  • 6.54MB
  • 下载

html利用map和area属性来实现创建图像链接,以及创建可点击图像热区

可以对图片上某几个点进行定位之后,然后创建可点击热区,形成可点击区域,此项技术常常运用在一些购物网站上,非常简单并且非常有用: 首先,将想要显示的图片,使用HTML标签将其显示在页面中,代码很简单,不...

创建和使用socket链接池

采用CS方式的程序不可避免都要碰到socket连接的问题,很多 时候,使用编程语言当中自带的socket库,使用起来多少有些不习惯,虽然系统自带的库在很多异常处理,稳定性上下了很多功夫,但是要去理解...

使用httpclient实现http链接池与使用HttpURLConnection发送http请求的方法与性能对比

使用httpclient实现http链接池与使用HttpURLConnection发送http请求的方法与性能对比在项目中需要使用http调用接口,实现了两套发送http请求的方法,一个是使用apac...

数据库链接池的使用,对应于多数据库(用c3p0实现Apache—DBUtils框架)

要说数据库连接池,我们先来谈谈对象池的概念。所谓对象池,就是把频繁使用的对象缓存起来,可以重复使用。首先:一个对象的生存周期包括:对象的创建、对象的使用、对象的销毁。 1、对于对象的创建,我们知...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)