datasourcejdbc.java~16~

来自「一个自己做的公司网站和办公职员管理系统。」· JAVA~16~ 代码 · 共 118 行

JAVA~16~
118
字号
package ws.woa.core;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import java.util.*;
import java.lang.Exception;

/**
 * JDBC僨乕僞僜乕僗忣曬傪奿擺偡傞僋儔僗偱偡丅
 * 曐帩偡傞忣曬偐傜偺Connection僆僽僕僃僋僩惗惉儊僜僢僪傪帩偪傑偡丅
 *
 * @author Wang
 */
public class DataSourceJDBC {

    private ArrayList alDBs;

    private String user;
    private String password;
    private String url;
    private String driver;
    private boolean autoCommit;
    private int connNum; // Added by Wang for JDBC Pool.

    /**
     * 僐儞僗僩儔僋僞
     * @param user
     * @param password
     * @param url
     * @param driver
     */
    public DataSourceJDBC(String user,String password,String url,String driver,
                          boolean autoCommit,String connNum) {
        this.user       = user;
        this.password   = password;
        this.url        = url;
        this.driver     = driver;
        this.autoCommit = autoCommit;
        this.connNum = Integer.parseInt(connNum); // Added by Wang for JDBC Pool.

        init(); // Added by Wang for JDBC Pool.
    }

    /**
     * 僐僱僋僔儑儞傪庢摼偟傑偡丅
     */
    /*
    public Connection getConnection() throws ClassNotFoundException, SQLException {
        Class.forName(this.driver);
        Connection conn = DriverManager.getConnection(this.url,this.user,this.password);
        conn.setAutoCommit(this.autoCommit);
        return conn;
    }
    */

    // Begin - Added by Wang for JDBC Pool.
    public void init() {
        alDBs = new ArrayList();
        try {
          Class.forName(driver).newInstance();
          for (int i = 0; i < this.connNum; i++) {
            Connection conn = DriverManager.getConnection(this.url, this.user,
                this.password);
            conn.setAutoCommit(this.autoCommit);
            alDBs.add(conn);
          }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void destroy() {
        try {
            synchronized (alDBs) {
                while(this.connNum > 0) {
                    Connection conn = (Connection) alDBs.get(0);
                    conn.close();
                    alDBs.remove(0);
                    this.connNum--;
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public Connection getConnection() throws SQLException {
        Thread curThread = Thread.currentThread();
        int timeout = 5;
        while(timeout-- > 0) {
            synchronized (alDBs) {
                if (this.connNum > 0) {
                    Connection conn = (Connection) alDBs.get(0);
                    alDBs.remove(0);
                    this.connNum--;
                    return conn;
                }
            }
            try {
                curThread.sleep(50+Math.round(Math.random()*51));
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        throw new SQLException("No more DB connection.");
    }

    public void releaseConnection(Connection conn) {
        synchronized (alDBs) {
            alDBs.add(conn);
            this.connNum++;
        }
    }
    // End - Added by Wang for JDBC Pool.
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?