`

自己实现数据库连接池

 
阅读更多
package myd.utils;

import java.util.*;
import java.sql.*;


import org.junit.Test;

/**
 * 2012-12-28
 * @author fs
 * DBConnectionPool
 */
public class DBConnectionPool {
	  
	
	
	public DBConnectionPool(int poolsize)
	{
		this.poolsize = poolsize;
		init();
	}
	
	
	public DBConnectionPool()
	{
		this(1);
	}
	
	private int poolsize = 0;
	
	
	private HashMap<Connection,String> dbconncoolmap = new HashMap<Connection,String>();
	//private List<HashMap<Connection,String>> pollconnList = new ArrayList<HashMap<Connection,String>>();
	String drivername = "oracle.jdbc.driver.OracleDriver";
	String driverURL="jdbc:oracle:thin:@192.168.90.187:1521:dev";
	String username="jztmsg";
	String password = "123";
	
	private final String  STATCE= "ISABLE";
	private final String  NOTSTATCE= "ISNOEABLE";
	
	public void init()
	{
		for(int i = poolsize;i>0;i--)
		{	
			dbconncoolmap.put(this.getConnection(), STATCE);
		}
	}
	
	private Connection getConnection()
	{
		Connection conn = null;
		try {
			Class.forName(drivername);
			conn = DriverManager.getConnection(driverURL, username, password);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch(SQLException e)
		{
			e.printStackTrace();
		}
		return conn;
	}
	
	
	public Connection getConnectionformPool()
	{
		Connection conn = null;
		boolean isconnectionflag = true;
		for(Map.Entry<Connection, String> myentry : dbconncoolmap.entrySet())
		{
			synchronized (myentry) {
					 	if(myentry.getValue().equals(STATCE))
						{					 		
					 		myentry.setValue(NOTSTATCE);
							return myentry.getKey();
						}
					 	isconnectionflag = false;
					 }
		}
		
		if(!isconnectionflag)
		{
			conn = this.getConnection();
			dbconncoolmap.put(conn, NOTSTATCE);
		}
		return conn;
	}
	
	
	
	public void closeConnection(Connection conn)
	{
		for(Map.Entry<Connection, String> myentry : dbconncoolmap.entrySet())
		{
			synchronized (myentry) {
				 	if(myentry.getKey().equals(conn))
					{
				 		myentry.setValue(STATCE);
					}
			}
		}
	}
	
	public int getIsablePoolsize()
	{
		int i= 0;
		for(Map.Entry<Connection, String> myentry : dbconncoolmap.entrySet())
		{
				 	if(myentry.getValue().equals(STATCE))
					{
				 		i++;
					}
		}
		return i;
	}
	
	public int getPoolsize()
	{
		
		return this.dbconncoolmap.size();
	}
	
	
	
	@Test
	public void one()
	{
		String sql = "select * from msg_company";
		DBConnectionPool dbconnectionpool = new DBConnectionPool(3);
		Connection conn = dbconnectionpool.getConnectionformPool();
		System.out.println("getIsablePoolsize:"+dbconnectionpool.getIsablePoolsize()+"poolsize:"+dbconnectionpool.getPoolsize());
		try {
			Statement state = conn.createStatement();
			ResultSet resultset = state.executeQuery(sql);	
			while (resultset.next()){ 
				System.out.println(resultset.getLong(1));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			dbconnectionpool.closeConnection(conn);
		}
		Connection conn2 = dbconnectionpool.getConnectionformPool();
		System.out.println("getIsablePoolsize:"+dbconnectionpool.getIsablePoolsize()+"poolsize:"+dbconnectionpool.getPoolsize());
		Connection conn3 = dbconnectionpool.getConnectionformPool();
		System.out.println("getIsablePoolsize:"+dbconnectionpool.getIsablePoolsize()+"poolsize:"+dbconnectionpool.getPoolsize());
		Connection conn4 = dbconnectionpool.getConnectionformPool();
		System.out.println("getIsablePoolsize:"+dbconnectionpool.getIsablePoolsize()+"poolsize:"+dbconnectionpool.getPoolsize());
		Connection conn5 = dbconnectionpool.getConnectionformPool();
		System.out.println("getIsablePoolsize:"+dbconnectionpool.getIsablePoolsize()+"poolsize:"+dbconnectionpool.getPoolsize());
		
		
	}
	
	
	public static void main(String[] args) {
		
	}


	public String getDrivername() {
		return drivername;
	}


	public void setDrivername(String drivername) {
		this.drivername = drivername;
	}


	public String getDriverURL() {
		return driverURL;
	}


	public void setDriverURL(String driverURL) {
		this.driverURL = driverURL;
	}


	public String getUsername() {
		return username;
	}


	public void setUsername(String username) {
		this.username = username;
	}


	public String getPassword() {
		return password;
	}


	public void setPassword(String password) {
		this.password = password;
	}


	public void setPoolsize(int poolsize) {
		this.poolsize = poolsize;
	}
	
				
}

分享到:
评论

相关推荐

    c# mysql数据库连接池实现

    本文将深入探讨如何在C#中使用MySQL数据库连接池。 首先,我们需要了解什么是数据库连接池。数据库连接池是一种资源管理技术,它预先创建并维护一定数量的数据库连接,当应用需要时,可以从池中获取连接,使用完毕...

    数据库连接池技术详解

    对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技术。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。 在较为完备的数据库连接池实现中,可根据...

    delphi实现数据库连接池

    在Delphi这个强大的Windows应用程序开发环境中,实现数据库连接池能够有效地解决频繁创建和销毁数据库连接带来的性能问题。下面我们将详细探讨如何在Delphi中实现数据库连接池,以及其核心概念和优势。 数据库连接...

    C#高效数据库连接池源码

    在C#编程环境中,我们可以使用自定义的数据库连接池来实现这一功能。本篇文章将深入探讨“C#高效数据库连接池源码”相关的知识点。 1. **数据库连接池原理**: 数据库连接池是一种对象池设计模式的应用,它维护了...

    C# 数据库连接池 C# 数据库连接池

    在C#中,主要使用ADO.NET框架来实现数据库连接池。以下是一些关键类和方法: 1. **System.Data.SqlClient.SqlConnection**:这是SQL Server数据库的连接类,支持连接池。在创建`SqlConnection`对象时,如果没有指定...

    Java jdbc数据库连接池总结

    Java JDBC 数据库连接池总结 Java 语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁。在 Web 应用开发的早期,主要使用的技术是 CGIASPPHP 等。之后,Sun 公司推出了基于 Java 语言的 ...

    使用JAVA中的动态代理实现数据库连接池

    在本文中,我们将探讨如何使用Java的动态代理来实现数据库连接池,从而解决传统连接池设计中的耦合度问题和资源管理问题。 首先,数据库连接池是应用程序管理数据库连接的一种高效方式。它通过复用已建立的数据库...

    TP利用Swoole实现数据库连接池

    ThinkPhp利用swoole创建数据库连接池,优化数据读取,减少请求消耗!

    03-数据库连接池驱动_数据库连接池;驱动_

    其次,Druid是阿里巴巴开源的数据库连接池实现,它不仅是一个连接池,还集成了监控、SQL解析、WebStatFilter等特性。Druid以其强大的监控能力、优秀的性能和全面的功能深受开发者喜爱。它提供了实时的监控界面,可以...

    常用jdbc数据库连接jar包,数据库连接池jar包

    本资源集合了常用的JDBC数据库连接jar包,以及一些知名的数据库连接池实现,如dbcp和c3p0,这对于开发人员来说是非常宝贵的资源。 首先,让我们了解一下JDBC。JDBC提供了一套标准的API,包括接口和类,使得开发者...

    数据库连接池代码实现

    接下来,我们将以Java为例,简要介绍如何使用开源库如C3P0、HikariCP或Apache DBCP来实现数据库连接池。 1. **C3P0** 是一个开源的JDBC连接池,提供了数据库连接的自动获取、释放和管理功能。在使用C3P0时,我们...

    数据库连接池java代码实现

    数据库连接池在Java中的实现是提高应用程序性能的关键技术之一,它通过复用已存在的数据库连接,避免了频繁创建和销毁连接导致的系统资源浪费。本文将深入探讨如何使用Java代码来实现一个简单的数据库连接池,并解释...

    自己写的数据库连接池(java)

    在给定的标题“自己写的数据库连接池(java)”中,我们可以推测这是一个用户自定义的数据库连接池实现,可能是为了学习或实践目的。描述提到的“XML版读取属性文件”和“普通的”,暗示了两种不同的配置方式,一种是...

    JAVA 完整的数据库连接池实现

    本文将详细介绍如何在 Java 中实现一个完整的数据库连接池,并探讨其核心概念、工作原理以及如何根据需求进行配置。 首先,我们需要理解数据库连接池的基本概念。数据库连接池是一种对象池设计模式的应用,它维护了...

    非常好的数据库连接池实现

    数据库连接池 数据库连接池 数据库连接池 数据库连接池

    delphi数据库连接池

    在Delphi中,实现数据库连接池可以通过第三方库或者自定义设计。描述中提到的"经典的数据库连接池"可能是指某些知名第三方组件,如TDBXConnectionPool或AnyDAC的连接池机制。这些组件通常提供对多种数据库引擎的支持...

Global site tag (gtag.js) - Google Analytics