<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    下面是以前學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;
    }

    }

    在項目中用到連接池的話,一般會直接使用已有的開源連接池實現,比如用 apache 的common-dbcp.jar和common-pool.jar 相結合,很少去自己實現。

    posted on 2012-09-03 21:55 abin 閱讀(527) 評論(0)  編輯  收藏 所屬分類: JDBCP
    主站蜘蛛池模板: 久久精品国产亚洲综合色| 成人免费无码大片a毛片软件| 亚洲高清最新av网站| 精品无码一级毛片免费视频观看| 免费看国产精品3a黄的视频| 亚洲国产精品一区二区久| 美女被cao网站免费看在线看| 亚洲AV无码不卡在线播放| 十八禁无码免费网站| 亚洲人成影院77777| 最近最新中文字幕完整版免费高清 | 国产亚洲精品福利在线无卡一 | 成人爱做日本视频免费| 国产精品国产亚洲区艳妇糸列短篇 | 亚洲人AV永久一区二区三区久久| 免费精品久久久久久中文字幕| 又粗又黄又猛又爽大片免费 | 久久精品视频免费看| 亚洲一区二区在线免费观看| 日本zzzzwww大片免费| 成人亚洲国产va天堂| 国产免费一区二区三区VR| 国产99视频精品免费视频76| 国产亚洲一区二区三区在线| 5g影院5g天天爽永久免费影院| 99久久婷婷国产综合亚洲| 免费无码不卡视频在线观看| 亚洲精品视频免费| 91亚洲国产成人久久精品网站| 国产福利在线免费| 有色视频在线观看免费高清在线直播| 亚洲深深色噜噜狠狠爱网站| 国产成人精品免费视频动漫| 亚洲高清一区二区三区电影| 亚洲精品无码专区在线在线播放 | 羞羞视频免费网站日本| 亚洲AV中文无码乱人伦下载| 成人免费视频观看无遮挡| 九九免费久久这里有精品23| 亚洲白色白色永久观看| 亚洲精品国产成人影院|