<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 閱讀(528) 評論(0)  編輯  收藏 所屬分類: JDBCP
    主站蜘蛛池模板: 国产精品亚洲综合专区片高清久久久| 一区二区三区免费视频网站| 久久国产乱子伦免费精品| 亚洲精品一品区二品区三品区| 亚洲黄片手机免费观看| 国产成人A亚洲精V品无码| 国产一区二区三区免费观在线| 久久久久亚洲AV成人网| 两个人看的www高清免费观看| 亚洲AV无码久久精品狠狠爱浪潮| 好久久免费视频高清| 久久久亚洲裙底偷窥综合| 亚洲视频在线观看免费视频| 亚洲一区二区三区高清不卡| 日本免费电影一区| 一级一级一片免费高清| 久久久久久亚洲av成人无码国产| 91嫩草免费国产永久入口| 亚洲人成图片网站| 四虎国产精品免费久久影院| aa毛片免费全部播放完整| 亚洲国产精品国自产拍电影| 欧美a级成人网站免费| 亚洲6080yy久久无码产自国产 | 国产精品免费网站| 亚洲av无码成人精品国产| 在线观看亚洲精品国产| 免费A级毛片无码视频| 亚洲色一区二区三区四区 | 24小时日本在线www免费的| 337P日本欧洲亚洲大胆精品| 永久亚洲成a人片777777| 四虎成年永久免费网站| 国产亚洲综合一区二区三区| 亚洲国产精品特色大片观看完整版 | 四虎永久精品免费观看| 久久亚洲免费视频| 亚洲A∨精品一区二区三区下载| 亚洲色中文字幕无码AV| 成人激情免费视频| a毛片在线免费观看|