Java模拟.NET的连接池

在之前:

      .NET的ADO.NET的本身包含连接池功能,而java是在第三方开发包中提高的连接池功能因此,需要去下载第三方的连接池包,但是java的连接池一般都是在EJB或者B/S系统中使用的(虽然也有C/S下的连接池如Borland 在Jbuilder中提供的),在一个服务性系统中使用起来不是很方便.再说使用第三方的开发包也不利于维护.因此决定自己写一个连接池的开发包.此连接池中主要解决的是提高数据库访问性能,并且尽可能减少连接数目.

说明:

     此连接池有三个类和一个接口组成,三个类分别是:

DBConnectionPool 数据库连接池,用户可以通过此类来使用连接池的功能.

PoolConnection 一个实现了java.sql.Connection的warp类,用来和数据库进行通讯.

 theOnClose 实现了接口OnConnectionClose的一个类用还处理释放数据库连接的是动作决定是关闭数据库还是返回池中

接口 :

  OnConnectionClose:此接口是一个声明,因为本人很不喜欢java的事件机制因此,我经常自己写一些接口来模拟时间,没有java的事件机制那么强大也没有那么复杂.但是效率要比java的事件机制要高那么一点点(笑:).

本来要上传这几个小类的UML图的但是我一点IE就死,所以算了.就只上传代码.还望方家指正.

代码:

package DBTools;

/**
 * <p>T数据库连接池工具 </p>
 * <p>模拟.NET的连接池,俺一直以为.NET比java优秀 </p>
 * <p>Copyright: 可以随便使用,如果有改进最好通知俺</p>
 * <p>Company:自己作品 </p>
 * @author董平雷
 * @version 1.0
 */
import java.sql.*;
import java.util.*;
import java.io.*;

interface OnConnectionClose {
  public void Action(PoolConnection sender);

}

public class DBConnectionPool {

  private static Vector pConnectionVector = new Vector();
  // private static int Count=0;
  private static int minCount = 1;
  private static String URL = "";
  private static String User = "";
  private static String Password = "";
  private static String DriverName="";
 synchronized public static void setMinCount(int Value) {
    minCount = Value;
  }

 synchronized public static int getMinCount() {
    return minCount;
  }

synchronized  public static int getCout() {
    return pConnectionVector.size();
  }

 synchronized public static Connection getConnection() throws SQLException {
    PoolConnection pConnection = null;
    // int aCount=pConnectionVector.size();

    for (int i = 0; i < pConnectionVector.size(); i++) {
      Object oCon = pConnectionVector.elementAt(i);
      if (oCon instanceof PoolConnection) {
        PoolConnection aCon = (PoolConnection) oCon;
        if (!aCon.isUsed()) {
          pConnection = aCon;
          break;
        }

      }

    }
    if (pConnection == null) {
      pConnection = getNewConnection();
      pConnectionVector.add(pConnection);
    }
    return pConnection;

  }

  private static PoolConnection getNewConnection() throws SQLException {
    try
    {
       Class.forName( DriverName);
    }catch(ClassNotFoundException ex)
    {
      ex.printStackTrace();
    }
    PoolConnection con = new PoolConnection(URL, User, Password);
    con.setOnClose(new theOnClose(pConnectionVector));
    return con;
  }

 synchronized public static void SetJDBC(String url, String user, String password) {
    URL = url;
    User = user;
    Password = password;

  }

 synchronized public static void setURL(String url) {
    URL = url;

  }

synchronized  public static String getUrl() {
    return URL;

  }
synchronized  public static void setUser(String user)
  {
     User=user;
  }
synchronized  public static String getUser()
  {
    return User;
  }
synchronized  public static void setPassword(S

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lifejoy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值