获取数据库连接对象(线程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 ;    // 获得数据库连接对象
    }
}

 

posted @ 2017-09-07 17:10  scwyfy  阅读(2270)  评论(0编辑  收藏  举报