`
hwei_344370758
  • 浏览: 21466 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java链接池实现

    博客分类:
  • java
 
阅读更多
package com.siven.connpool;

import java.io.IOException;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.Vector;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class ConnectionPool {

public static ConnectionPool connectionPool = null;

public int clients = 10;

public Vector<Connection> freeConnections = new Vector<Connection>();

public Driver driver;

public int max = 20;

private ConnectionPool() throws SAXException, IOException, ParserConfigurationException, InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
init();
}

public static ConnectionPool getInstance() throws SAXException, IOException, ParserConfigurationException, InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
if(connectionPool==null){
connectionPool = new ConnectionPool();
}
return connectionPool;
}

public void init() throws SAXException, IOException, ParserConfigurationException, InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
driver = (Driver) Class.forName(getConfig("driver")).newInstance();
max=Integer.valueOf(getConfig("max")).intValue();
Class.forName(getConfig("driver"));
String connections = getConfig("connections");
String username=getConfig("username");
String password=getConfig("password");
for(int i=0;i<clients;i++){
Connection conn = DriverManager.getConnection(connections,username,password);
freeConnections.add(conn);
}
}

public Connection getConnection() throws ClassNotFoundException, SQLException, SAXException, IOException, ParserConfigurationException{
Connection conn = null;
if(freeConnections.size()>0){
conn = (Connection)freeConnections.firstElement();
freeConnections.removeElementAt(0);
}else{
if(clients<max){
conn = newConnection();
}
}
return conn;
}

public void freeConnection(Connection conn) throws SQLException{
freeConnections.add(conn);
release();
}

public void release() throws SQLException{
Enumeration<Connection> allConnections  = freeConnections.elements();
while(allConnections.hasMoreElements()){
Connection con = (Connection) allConnections.nextElement();
con.close();
}
if(freeConnections.size()>10){
for(int i=10;i<freeConnections.size();i++){
Connection con = freeConnections.remove(i);
con = null;
}
}
DriverManager.deregisterDriver(driver);
}

public Connection newConnection() throws ClassNotFoundException, SQLException, SAXException, IOException, ParserConfigurationException{
Class.forName(getConfig("driver"));
Connection conn = DriverManager.getConnection(getConfig("connections"),getConfig("username"),getConfig("password"));
clients++;
return conn;
}

public String getConfig(String attribute) throws SAXException, IOException, ParserConfigurationException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("config.xml");
NodeList nl = doc.getElementsByTagName("config");
Element e=(Element)nl.item(0);
return e.getAttribute(attribute);
}

public Vector<Connection> getFreeConnections() {
return freeConnections;
}

public void setFreeConnections(Vector<Connection> freeConnections) {
this.freeConnections = freeConnections;
}


}
分享到:
评论

相关推荐

    Java 连接池实现

    总的来说,Java连接池是提高数据库应用性能的重要工具,通过合理配置和选择合适的连接池实现,我们可以有效地管理和利用数据库连接,减少系统资源的消耗,提升整体系统的响应速度和稳定性。对于开发者来说,理解和...

    java连接池实现

    Java连接池实现是一种高效管理数据库连接的技术,它允许应用程序重复使用已经建立的数据库连接,而不是每次需要时都创建新的连接。这大大降低了系统的资源消耗,提高了应用的性能和响应速度。连接池的基本思想是初始...

    java socket连接池 实现

    Java Socket 连接池实现是提高网络应用性能和效率的关键技术之一。在高并发的网络环境中,频繁地创建和销毁Socket连接会导致大量的系统资源浪费,影响整体性能。为了解决这个问题,开发人员通常会使用连接池来管理和...

    浅谈java连接池

    常见的Java连接池实现有Apache的DBCP、C3P0、HikariCP以及Tomcat的内置连接池等。选择合适的连接池依赖于应用程序的需求,如并发量、性能要求、稳定性等因素。正确的配置和使用连接池是提升Java应用程序性能、降低...

    java连接池可以自己更换数据库

    通过上述分析可以看出,该Java连接池实现支持动态更换数据库的关键在于多数据源的支持以及灵活的连接管理机制。这种方式不仅提高了系统的灵活性,也使得在不同数据库之间切换变得更为简单。对于需要支持多种数据库...

    mysql,sqlserver,oracle,java连接池,连接程序

    本项目涵盖了对MySQL、SQL Server、Oracle这三种主流关系型数据库的Java连接池实现,旨在提供一个可以直接在Eclipse环境中运行的代码示例。 首先,我们来了解一下什么是连接池。数据库连接池是一种在应用程序启动时...

    mysql连接池java源码

    一个简单的Java连接池实现通常包括以下几个核心组件: - **ConnectionFactory**:创建数据库连接的工厂类,负责初始化连接。 - **PoolManager**:连接池管理器,维护连接池的生命周期,包括初始化、分配、回收和...

    java连接池 beta v1

    这个链接可能指向一个包含Java连接池实现的源码包,可能是作者自定义的版本或者对已有连接池库如C3P0、DBCP、HikariCP或Apache DBCP2的改进版。 在Java中,连接池通常通过以下步骤工作: 1. 初始化:应用程序启动时...

    完美的java jdbc连接池实例

    在本实例中,可能使用了诸如C3P0、HikariCP、Apache DBCP或Druid等流行的Java连接池实现。这些连接池组件提供了一种高效的连接管理策略,包括初始化连接数量、最大连接数、连接超时、空闲连接检测等功能,以确保系统...

    Java 连接池源码

    在Java中,常见的连接池实现有Apache的DBCP、C3P0,还有更现代的HikariCP。这些库都提供了高效的连接管理和自动回收功能。然而,了解连接池的内部工作原理对于优化数据库操作和解决相关问题至关重要。 个人实现Java...

    Java连接池的实现

    Java连接池是优化数据库操作的关键技术之一,它允许应用程序高效地管理和重用数据库连接,避免了频繁创建和关闭连接导致的性能开销。本篇将详细介绍如何在Java中实现一个简单的连接池,以及相关的概念和技术。 首先...

    Java直连数据库代码还有连接池代码

    常见的Java连接池实现包括: 1. **HikariCP**: 速度极快,被广泛推荐。配置简单,且具有很好的性能监控特性。 2. **Apache DBCP**: Apache的一个经典项目,提供基本的连接池功能。 3. **C3P0**: 另一个流行的连接...

    java数据库连接池源码及使用示例

    在实际项目中,常见的Java连接池实现有C3P0、DBCP、HikariCP和Apache DBCP2等。每个都有其特点和优势,例如HikariCP以其高性能和低延迟著称。而手写连接池虽然能帮助理解连接池的工作原理,但在生产环境中,通常推荐...

    Java连接SAP系统所用的JCo连接池的配置和使用

    JCo连接池可以在Java应用程序中实现连接池的功能,用于连接SAP R3系统。 在Java应用程序中使用JCo连接池需要首先创建JCo连接池对象,然后使用该对象来连接SAP R3系统。在连接SAP R3系统时,需要提供SAP系统的连接...

    java 连接池

    在本项目中,我们关注的是Apache的Commons DBCP(Database Connection Pool),这是一个常用的Java连接池实现,它被广泛应用于包括Tomcat在内的服务器中。 Commons DBCP依赖于两个其他的Apache Commons组件:...

    java实现连接池

    理解并正确使用Java连接池是任何涉及数据库操作的Java应用的基础,它对于优化系统性能、提高资源利用率和保证服务稳定性都有着重要作用。选择合适的连接池库并进行适当的配置,可以进一步提升系统的响应速度和并发...

    Java 连接池【示例】

    本文将深入探讨Java连接池的工作原理、常用实现及其实例应用。 一、连接池的概念与作用 1.1 概念 连接池是在应用程序启动时预创建一定数量的数据库连接,并将它们存储在内存中,当应用程序需要访问数据库时,可以从...

Global site tag (gtag.js) - Google Analytics