`
luoyuefei
  • 浏览: 12216 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java 实现的简单数据库连接池【转】

阅读更多
一个连接容器,记录连接和连接使用状况
package db.khan;

import java.sql.*;

/**//*数据库连接容器
 * */
public class DBPoolCon {
  /**//*容器中的连接*/
  public Connection con = null;

  public int nUsedTimes = 0;

  DBPoolCon() {
  }

  public Connection get() {
    return con;
  }
}


一个操作和管理连接容器的连接池
package db.khan;

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

/** *//**连接池类
 * */
public class DBConPool {
  protected LinkedList listCon = new LinkedList();// 一个存放链接池的链表
  protected String DBUrl = null;
  protected String DBUser = null;
  protected String DBPasswd = null;
 
  /** *//**最大连接数*/
  protected int nMaxCon = 0;
 
  /** *//**连接最大使用时间*/
  protected int nMaxUsedTime = 0;
 
  /** *//**当前已用连接数*/
  protected int nConNum = 0;

  /** *//**构造器
   * @param String DBUrl
   * @param String DBUser
   * @param String DBPasswd
   * @param int nMaxCon
   * @param int nMaxUsedTime*/
  DBConPool(String DBUrl, String DBUser, String DBPasswd, int nMaxCon, int nMaxUsedTime) {
    this.DBUrl = DBUrl;
    this.DBUser = DBUser;
    this.DBPasswd = DBPasswd;

    this.nMaxCon = nMaxCon;
    this.nMaxUsedTime = nMaxUsedTime;
  }

  /** *//**从连接池中取得连接(线程安全函数)
   * @return DBPoolCon 返回的数据库连接容器
   * */
  synchronized public DBPoolCon get() {
    if (listCon.size() > 0) {//有连接时,直接取得连接
      return (DBPoolCon) listCon.removeFirst();
    }
    if (nConNum < nMaxCon) {//如果没有多余连接,但连接池未满,新建一个连接
      return createCon();
    }
   
    System.out.println("Fail to get DB con, too many con: " + nConNum + " max:" + nMaxCon);
    return null;
  }

  /** *//**销毁连接
   * @param  DBPoolCon pCon*/
  synchronized public void release(DBPoolCon pCon) {
    pCon.nUsedTimes++;
    if (pCon.nUsedTimes > nMaxUsedTime) {//如果使用时间大于最大使用时间,则该连接被回收
      try {
        nConNum--;
        pCon.con.close();
        System.out.println("DB Con closed for used out");
      } catch (Exception e) {
        System.err.println("Fail to close DB Con");
      }
    } else {  //否则,该连接被重新分配
      listCon.add(pCon);
    }
  }

  /** *//**建立连接容器
   * @return DBPoolCon 返回一个连接容器*/
  protected DBPoolCon createCon() {
    DBPoolCon pCon = new DBPoolCon();
    try {
      pCon.con = DriverManager.getConnection(DBUrl, DBUser, DBPasswd);
      pCon.con.setAutoCommit(true);
      nConNum++;
      System.out.println("DB Con created, con num:" + nConNum + " max:" + nMaxCon);
    } catch (Exception e) {
      System.err.println("Fail to create DB Con");
    }
    return pCon;
  }

  /** *//**回收器
   * 将连接池中的所有连接关闭*/
  protected void finalize() {
    try {
      while (listCon.size() > 0) {
        DBPoolCon pCon = (DBPoolCon) listCon.removeFirst();
        pCon.con.close();
      }
    } catch (Exception e) {
      System.err.println("Fail to close DB Con");
    }
  }
}
分享到:
评论

相关推荐

    Java jdbc数据库连接池总结

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

    java实现数据库连接池

    Java 实现数据库连接池 Java 实现数据库连接池是指使用 Java 语言编写的数据库连接池,用于管理和分配数据库连接,以提高数据库访问效率和性能。本文将详细介绍 Java 实现数据库连接池的原理、实现代码和应用场景。...

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

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

    JAVA 使用数据库连接池连接Oracle数据库全代码

    ### JAVA 使用数据库连接池连接Oracle数据库全代码解析 #### 一、概述 本文将详细介绍如何在Java项目中使用Apache DBCP(Database Connection Pool)来连接Oracle数据库,并提供完整的示例代码。通过这种方式,我们...

    java_jdbc数据库连接池总结

    Java JDBC 数据库连接池总结 Java JDBC 数据库连接池是 Java 应用程序访问数据库的基本原理之一。Java 语言通过 JDBC 技术访问数据库,JDBC 是一种“开放”的方案,为数据库应用开发人员和数据库前台工具开发人员...

    java写的数据库连接池

    本文将深入探讨数据库连接池的工作原理、重要性以及如何在Java中实现一个简单的连接池。 首先,数据库连接池是管理数据库连接的一种机制,它允许应用程序重复使用已建立的数据库连接,而不是每次需要时都创建新的...

    数据库连接池java代码实现

    本文将深入探讨如何使用Java代码来实现一个简单的数据库连接池,并解释其核心概念和工作原理。 连接池的基本思想是维护一组预初始化的数据库连接,当应用程序需要时,可以从池中获取一个连接,使用完毕后,再归还回...

    Java-jdbc数据库连接池总结.doc

    Java JDBC 数据库连接池技术是Java应用程序访问数据库的关键优化手段,尤其在Web应用程序中,它解决了传统JDBC连接方式存在的效率低下和资源浪费问题。Java JDBC(Java Database Connectivity)是Java语言与各种...

    java数据库连接池

    描述:本篇将详细介绍Java数据库连接池的概念,代码实现以及其在实际项目中的应用。数据库连接池是Java开发中优化数据库访问效率的关键技术,通过复用预创建的数据库连接,避免频繁创建和销毁连接带来的性能开销。 ...

    实现jdbc数据库连接池

    此类非常简单,免去了网上众多资料里所说的麻烦的tomcat配置,更强的是它可以通用!不仅oracle,mysql,sqlserver2000都行,因为它依据的是你自己连接数据库的驱动。当然首先你要保证你拥有一个能连接自己数据库的对应...

    JAVA数据库连接池

    Java数据库连接池是Java开发中一个非常重要的技术,它主要用于管理数据库连接,提高数据库操作的效率和性能。在Java应用程序中,频繁地创建和关闭数据库连接会导致大量的系统资源浪费,而连接池则可以复用已建立的...

    java连接mysql数据库连接池demo

    以上是关于"java连接mysql数据库连接池demo"项目中的核心知识点,实际的代码实现会根据所选择的连接池库和具体的业务需求有所不同。通过这个项目,你可以学习到如何在Java环境中有效地与MySQL数据库进行交互。

    轻量级java数据库连接池

    总结,这个轻量级的Java数据库连接池提供了简单而有效的数据库连接管理方案,对于小型项目或学习数据库连接池原理是非常有价值的。通过理解其工作原理和使用方法,开发者可以更好地优化自己的应用程序,提高系统的...

    Java各数据库连接池配置介绍

    Java数据库连接池是管理数据库连接的一种机制,它可以有效地复用数据库连接,避免每次数据库操作时创建和销毁连接的开销,从而提高了应用的性能。在Java中,有多种数据库连接池实现,包括C3P0、DBCP和Proxool等。 *...

    java手写数据库连接池

    总的来说,理解并实现一个简单的数据库连接池可以帮助我们更好地理解和利用这一技术,同时也能锻炼我们的多线程编程和设计能力。在实际项目中,结合maven和其他开源库,我们可以构建出高效、可靠的数据库连接管理...

    一个效果非常不错的JAVA数据库连接池

    ### 标题解析:“一个效果非常不错的JAVA数据库连接池” 此标题明确指出这是一个Java实现的数据库连接池,并且其效果良好。这意味着该连接池不仅能够有效管理数据库连接,还能确保高性能和稳定性。对于那些希望深入...

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

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

    java数据库连接池笔记

    Java数据库连接池是一种管理数据库连接的技术,用于高效地管理和复用数据库连接,从而提高应用程序的性能和资源利用率。连接池的基本思想是在应用启动时预先创建一定数量的数据库连接,存储在一个池中,当应用程序...

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

    以下是一个简单的示例,展示如何使用动态代理实现数据库连接池: 1. 定义数据库连接池参数类(如`DBPoolConfig`),存储JDBC驱动类名、URL、用户名和密码等信息,用于初始化连接池。 ```java public class ...

    Java类实现数据库连接池(源码)

    本示例将探讨如何通过自定义Java类来实现一个简单的数据库连接池。 首先,我们需要引入JDBC(Java Database Connectivity)API,这是Java与各种数据库交互的标准接口。在Java中,我们通常使用`java.sql.Connection`...

Global site tag (gtag.js) - Google Analytics