`
xiangqian0505
  • 浏览: 322295 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 数据库连接池的简单实现

    博客分类:
  • java
 
阅读更多
package com.wangjia.tools;

        import java.io.Serializable;
        import java.sql.*;
        import java.util.*;

        /**
        * 数据库连接池的简单实现
        * @author wangjia
        * @version 1.0
        *@serial 2301410997974776106L
        */
        public class DbConn implements Serializable{

        /**
        * 
        */
        private static final long serialVersionUID = 2301410997974776106L;
        private static List<Connection> connList=new ArrayList<Connection>();
        //private static String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";//sql2000
        private static String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";//sql2005
        private static String url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Forum";
        private static String userName="sa";
        private static String password="sa";
        private static int maxConn=20;
        private static int minConn=5;
        private static int usedConn=0;
        private static DbConn dbconn=null;
        // private static int flag=1;
        /**
        * 设置数据库连接的驱动
        * @param driver 数据库连接的驱动<br/>例如:"com.microsoft.sqlserver.jdbc.SQLServerDriver"
        */
        public static void setDriver(String driver) {
        DbConn.driver = driver;
        }

        /**
        * 设置数据库连接池的最小数量
        * @param maxConn 数据库连接池的最小数量
        */
        public static void setMaxConn(int maxConn) {
        DbConn.maxConn = maxConn;
        }

        /**
        * 设置数据库连接池的最大数量
        * @param minConn 数据库连接池的最大数量
        */
        public static void setMinConn(int minConn) {
        DbConn.minConn = minConn;
        }

        /**
        * 设置数据库连接的URL
        * @param url 数据库连接的URL,包括数据库的名称<br/>例如: "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=master"
        */
        public static void setUrl(String url) {
        DbConn.url = url;
        }

        private DbConn() throws MyException{
        try{
        Class.forName(driver);
        for(int i=0;i<minConn;i++){
        connList.add(DriverManager.getConnection(url,userName.toString(),password.toString()));
        }
        }catch(ClassNotFoundException e){
        throw new MyException("请设置正确的数据库连接驱动!\nusing: DbConn.setDriver(String driver)");

        }catch(SQLException e){
        throw new MyException("请设置正确的数据库连接URL以及用于连接的用户名和密码!\n" +
        "using: DbConn.setUrl(String url),DbConn.setUserName(String userName),DbConn.setPassword(String password)");

        }
        }
        /**
        * 用于得到DbConn对象
        * @return 返回一个DbConn对像
        */


        public static Connection getConn() throws MyException{
        // flag++;
        if(dbconn==null)dbconn=new DbConn();
        // System.out.println("falg="+flag);
        // System.out.println("usedConn="+usedConn);
        if(connList.size()==0){
        throw new MyException("没有正确的设置相关信息,以至连接池未初始化");
        }
        if(usedConn==maxConn){

        Thread thread=new Thread(new Runnable(){

        @SuppressWarnings("static-access")
        public void run() {
        if(usedConn<maxConn){
        try {
        try {
        Thread.currentThread().sleep(2000);
        } catch (InterruptedException e) {
        e.printStackTrace();
        }
        getConn();
        } catch (MyException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
        }

        }

        });
        thread.start();
        }
        if(usedConn>=minConn&&usedConn<maxConn){
        try {
        connList.add(DriverManager.getConnection(url,userName.toString(),password.toString()));
        } catch (SQLException e) {

        }
        return connList.get(usedConn++);
        }
        if(usedConn<5){
        return connList.get(usedConn++);
        }
        return null;
        }

        public static void close(){
        try {
        if(usedConn>5)
        connList.get(--usedConn).close();
        else usedConn--;
        } catch (SQLException e) {
        // TODO 自动生成 catch 块
        e.printStackTrace();
        }

        }

        /**
        * 设置用于连接数据库的密码
        * @param password 用于连接数据库的密码
        */
        public static void setPassword(String password) {
        DbConn.password = password;
        }

        /**
        * 设置用于连接数据库的用户名
        * @param userName 用于连接数据库的用户名
        */
        public static void setUserName(String userName) {
        DbConn.userName = userName;
        }

        }

 

分享到:
评论

相关推荐

    Java jdbc数据库连接池总结

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

    java数据库连接池

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

    JAVA数据库连接池

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

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

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

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

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

    JAVA数据库连接池类

    本篇文章将深入解析一个自定义的JAVA数据库连接池类,帮助开发者更好地理解和运用这一关键技术。 首先,连接池的基本思想是预先创建一定数量的数据库连接,并存储在一个集合(如Vector)中,供应用程序按需获取和...

    java数据库连接池.rar

    总的来说,Java数据库连接池如C3P0和Druid,以及Spring的JdbcTemplate,都是为了优化数据库操作而设计的工具。它们各自有其特点和优势,开发者可以根据项目需求选择合适的技术。在使用过程中,充分理解和合理配置...

    轻量级java数据库连接池

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

    Java数据库连接池的使用示例

    Java数据库连接池是Java应用程序管理数据库连接的一种高效方式。它避免了每次需要访问数据库时创建新的连接,而是预先创建一定数量的连接并保存在池中,当程序需要时可以从池中获取,用完后归还,从而提高了系统性能...

    Java数据库连接池的原理与应用.pdf

    Java数据库连接池的原理与应用 在Java开发领域,数据库连接池(Database Connection Pool,简称DBCP)是一种提高数据库访问性能、降低资源消耗的重要技术。它通过预先建立一定数量的数据库连接,存储在一个“池”中...

    数据库连接池java代码实现

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

    java 数据库连接池的实现代码

    本示例代码展示了一个简单的数据库连接池实现,名为`DBConnectionManager`,用于管理和分配数据库连接。下面将详细解释相关知识点: 1. **单例模式**:在类`DBConnectionManager`中,可以看到`instance`变量被声明...

Global site tag (gtag.js) - Google Analytics