<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 閱讀(513) 評論(0)  編輯  收藏 所屬分類: JDBCP
    主站蜘蛛池模板: 亚洲黄色网站视频| 亚洲精品中文字幕无乱码麻豆| 国外成人免费高清激情视频| 午夜一级毛片免费视频| 亚洲无线一二三四区手机| 久久精品国产亚洲av日韩| 国产精品亚洲va在线观看| 99麻豆久久久国产精品免费| 在线观看免费人成视频| 亚洲无线一二三四区手机| 一级毛片免费视频网站| 中字幕视频在线永久在线观看免费| 亚洲成人黄色网址| 国产一精品一AV一免费| 免费一级毛片在线观看| 亚洲高清中文字幕免费| 91久久成人免费| 国产福利电影一区二区三区,亚洲国模精品一区 | 免费一级毛片在级播放| 国产精品内射视频免费| 日本成人在线免费观看| 亚洲码在线中文在线观看| 中文字幕版免费电影网站| 免费久久精品国产片香蕉| 四虎影视久久久免费观看| 国产h视频在线观看免费| 亚洲精品美女久久久久久久| 91精品成人免费国产片| 亚洲真人无码永久在线观看| 亚洲一级毛片免费看| 亚洲精品无码专区在线播放| 成年人免费的视频| 亚洲第一成年网站大全亚洲| 久久久www成人免费毛片| 亚洲av极品无码专区在线观看| 精品无码AV无码免费专区| 国产亚洲精品自在久久| 窝窝影视午夜看片免费| 午夜亚洲国产理论秋霞| 在线涩涩免费观看国产精品 | 亚洲欧洲∨国产一区二区三区 |