day06【JDBC連接池&JDBCTemplate】

今日內容

  • 數據庫連接池
  • Spring JDBC : JDBC Template

1 數據庫連接池

1.1 概念

其實就是一個容器(集合),存放數據庫連接的容器。
當系統初始化好後,容器被創建,容器會申請一些連接對象,當用戶來訪問數據庫時,從容器中獲取連接對象,用戶訪問完之後,會將連接對象歸還給容器。

1.2 好處:

  1. 節約資源
  2. 用戶訪問高效

1.3 實現:

  1. 標準接口:DataSource javax.sql包下的
    • 獲取連接:getConnection()
    • 歸還連接:Connection.close()
      *如果連接對象Connection是連接池中獲取的,那麼調用Connection.close()方法不會關閉連接,而是歸還到連接池。
  2. 一般我們不去實現它,由數據庫廠商來實現
    • C3P0:連接池舊技術,不常用
    • Druid:阿里巴巴提供的新技術,效率更高

1.4 C3P0:數據庫連接池技術

  1. 導入jar包
    • c3p0-0.9.5.2.jar
    • mchange-commons-java-0.2.12.jar
    • 數據庫驅動jar包
  2. 定義配置文件:
    • 名稱:c3p0.properties 或者 c3p0-config.xml
    • 路徑:直接放到src目錄下即可
  3. 創建數據庫連接池對象
    ComboPooledDataSource
  4. 獲取連接:
    getConnection
    //1. 創建數據庫連接池對象
    DataSource ds = new ComboPooledDataSource();
    //2. 獲取連接對象
    Connection conn = ds.getConnection();
    

1.5 Druid:數據庫連接池技術(阿里)

  1. 導入jar包
    druid-1.0.9.jar
  2. 定義配置文件
    • 是properties形式的
    • 可以叫任意名稱,可以房子任意目錄
  3. 加載配置文件。Properties
  4. 獲取數據庫連接池對象:通過DruidDataSourceFactory工廠來獲取
  5. 獲取連接:getConnection
    //3. 加載配置文件
    Properties pro = new Properties();
    InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
    pro.load(is);
    //4. 獲取連接池對象
    DataSource ds = DruidDataSourceFactory.createDataSource(pro);
    //5. 獲取連接
    Connection conn = ds.getConnection();
    
    
  • 定義工具類
  1. 定義一個類 JDBCUtils
  2. 提供靜態代碼塊加載配置文件,初始化連接池對象
  3. 獲取連接池的方法
    public class JDBCUtils {
    	//1. 定義成員變量 DataSource
    	private static DataSource ds;
    	static {
    		try {
    			//1. 加載配置文件
    			Properties pro = new Properties();
    			pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
    			//2. 獲取DataSource
    			ds = DruidDataSourceFactory.createDataSource(pro);
    			} catch (IOEXception e) {
    				e.printStackTrace();
    			} catch (Exception e) {
    				e.printStackTrance();
    			}
    		}
    	//獲取連接
    	public static Connection getConnection() throw SQLException {
    		return ds.getConnection();
    	}
    	//釋放資源
    	public static void close(Statement stmt,Connection conn){
    	       /* if(stmt != null){
    	            try {
    	                stmt.close();
    	            } catch (SQLException e) {
    	                e.printStackTrace();
    	            }
    	        }
    	
    	        if(conn != null){
    	            try {
    	                conn.close();//歸還連接
    	            } catch (SQLException e) {
    	                e.printStackTrace();
    	            }
    	        }*/
    	
    	   close(null,stmt,conn);
    	}
    	public static void close(ResultSet rs , Statement stmt, Connection conn){
    	if(rs != null){
    	            try {
    	                rs.close();
    	            } catch (SQLException e) {
    	                e.printStackTrace();
    	            }
    	 }
    	  if(stmt != null){
    	            try {
    	                stmt.close();
    	            } catch (SQLException e) {
    	                e.printStackTrace();
    	            }
    	        }
    	
           if(conn != null){
                try {
                    conn.close();//歸還連接
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        //獲取連接池方法
        public static DataSource getDataSource() {
        	return ds;
        }
     }
    	      
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章