獲取數據庫連接對象(線程ThreadLocal)


/**
 * 負責數據庫連接定義的程序類
 * 該類可以負責所有操作線程的數據庫連接,利用get()方法可以獲得連接對象
 */
public class DatabaseConnection {
    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl" ;
    private static final String USER = "scott" ;
    private static final String PASSWORD = "tiger" ;
    private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>() ;
    /**
     * 負責對外部提供獲取的數據庫連接對象,該對象通過ThreadLocal獲取,如果當前線程沒有保存的連接對象,則創建新的連接
     * @return 連接對象
     */
    public static Connection getConnection() {
        Connection conn = threadLocal.get() ;    // 先判斷一下在ThreadLocal里是否有連接對象
        if(conn == null) {    // 第一次使用,沒有連接,沒有連接應該創建一個連接
            conn = connectionDatabase() ;    // 獲取連接對象
            threadLocal.set(conn);     // 將剛剛創建好的連接對象保存在ThreadLocal之中
        }
        return conn ;    // 返回連接對象
    }
    /**
     * 進行數據庫的關閉處理。
     */
    public static void close() {
        Connection conn = threadLocal.get() ;
        if (conn != null) {    // 現在有連接對象了
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } 
            threadLocal.remove();     // 從當前線程之中刪除掉指定連接
        }
    }
    /**
     * 負責創建一個數據庫連接對象
     * @return 數據庫連接的實例化對象
     */
    private static Connection connectionDatabase() {    // 該方法只能本類調用
        Connection conn = null ;
        try {    // 一旦連接出現了錯誤,整個程序都無發執行
            Class.forName(DBDRIVER) ;
            conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn ;    // 獲得數據庫連接對象
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM