淺談JDBC和資料庫連線池

weixin_46210148發表於2020-11-25

淺談JDBC和資料庫連線池

一、JDBC的概念

JDBC,全稱"Java Database Connectivity",意為"java與資料庫的連線",是java中用來規範客戶端程式如何來訪問資料庫的應用程式介面,提供了諸如查詢和更新資料庫中資料的方法。jdbc介面的具體方法由各大資料庫廠商去實現,即資料庫驅動,開發人員無需理會具體實現方法,只需學會呼叫相應介面的方法即可。

要使用jdbc,需要匯入相應資料庫的驅動包


二、JDBC使用步驟

  1. 匯入要操作的資料庫的驅動包

  2. 載入、註冊資料庫驅動(以mysql資料庫為例)

    Class.forname("com.mysql.jdbc.dirver");
    
  3. 獲取jdbc與資料庫的連線物件

    Connection conn = DriverManager.getConnection(url,username,password);//url是資料庫地址
    
  4. 建立執行sql語句的物件(負責把sql語句送到資料庫去給資料庫編譯)

    1. statement物件 (不安全,有sql注入風險)
    Statement st = conn.createStatement();
    

    ​    2.preparedStatement物件 (安全,用得較多)

    PreparedStatement pst = conn.prepareStatement(String sql);//預編譯 sql語句待傳引數用佔位符?替換
    
  5. 處理結果

    1. statement物件

      int num = st.executeUpdate(String sql);//執行增刪改方法,返回資料庫受影響行數
      ResultSet rs = st.executeQuery(String sql);//執行查詢方法,放回查詢結果 ResultSet是連結串列結構
      
    2. preparedStatement物件

      String sql = "selet * from user where id = ?";
      pst.setInt(1,20);//第一個參數列示給第一個?傳值,第二個參數列示具體值
      int num =pst.executeUpdate()//執行增刪改方法,返回資料庫受影響行數  注意,括號內不能傳引數
      ResultSet rs = st.executeQuery(String sql);//執行查詢方法,放回查詢結果 ResultSet是連結串列結構
      
  6. 釋放jdbc物件的連線 (順序和建立時剛好相反)

    rs.close();
    pst.close();
    conn.close();
    

三、資料庫連線池

傳統應用中每次每個使用者想要運算元據庫,都需要建立一個與資料庫的連線,操作完畢之後再斷開連線,這對於系統開銷其實是很大的,資料庫連線池便應運而生。"資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而不是再重新建立一個"這是百度百科給的概念。通俗來講,可以理解為程式建立了一個池子,然後事先建立了很多connection物件,放在這個池子裡面,當使用者需要時直接從池子中取,使用完釋放連線時並不銷燬這個connection物件,而是把它放回連線池裡,這樣可以大大節省系統資源的開銷,提高系統效能。

資料庫連線池底層是實現了一個叫DataSource的介面。 使用者可以自定義連線池的最大連線數和最小連線數、超時等待時間等屬性。不設定則採用預設值當連線供不應求(也就是請求連線數大於池子中連線總數)時,使用者需要排隊等待。

如今流行的資料庫連線池技術有很多,主流的有Druid(阿里的),HiKariCP(號稱效能最好),dbcp(apache出品),c3p0。

相關文章