JavaWeb6.2【Druid資料庫連線池技術、Druid連線池工具類】
阿新 • • 發佈:2021-06-25
1 package com.haifei.datasource.druid; 2 3 import com.alibaba.druid.pool.DruidDataSourceFactory; 4 5 import javax.sql.DataSource; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.sql.Connection; 9 import java.util.Properties; 10 11 /* 12 資料庫連線池 13 14 5 Druid:資料庫連線池技術,由阿里巴巴提供15 16 1. 步驟: 17 1. 匯入jar包 druid-1.0.9.jar 18 不要忘記還需要資料庫驅動jar包mysql-connector-java-5.1.37-bin.jar 19 2. 定義配置檔案: 20 * 是properties形式的 21 * 可以叫任意名稱,可以放在任意目錄下 22 3. 利用Properties集合類載入配置檔案 23 4. 獲取資料庫連線池物件:通過工廠來來獲取 DruidDataSourceFactory24 5. 獲取連線:getConnection 25 26 2. 定義工具類 27 1. 定義一個類 JDBCUtils 28 2. 提供靜態程式碼塊載入配置檔案,初始化連線池物件 29 3. 提供方法 30 1. 獲取連線方法:通過資料庫連線池獲取連線 31 2. 釋放資源 32 3. 獲取連線池的方法 33 */ 34 public class DruidDemo1 { 35 public static void main(String[] args) throwsException { 36 //3 載入配置檔案 37 Properties prop = new Properties(); 38 InputStream is = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties"); 39 prop.load(is); 40 41 //4 利用工廠來獲取連線池物件 42 DataSource ds = DruidDataSourceFactory.createDataSource(prop); 43 44 //5 獲取連線物件 45 Connection conn = ds.getConnection(); 46 System.out.println(conn); //com.mysql.jdbc.JDBC4Connection@13b6aecc 47 } 48 }
1 package com.haifei.utils; 2 3 import com.alibaba.druid.pool.DruidDataSourceFactory; 4 5 import javax.sql.DataSource; 6 import javax.xml.crypto.Data; 7 import java.io.IOException; 8 import java.sql.Connection; 9 import java.sql.ResultSet; 10 import java.sql.SQLException; 11 import java.sql.Statement; 12 import java.util.Properties; 13 14 /** 15 * Druid連線池工具類 16 * 後期開發主用 17 */ 18 public class JDBCUtils { 19 20 21 //定義成員變數 22 private static DataSource ds; 23 24 //靜態程式碼塊 25 static { 26 try { 27 //1 載入配置檔案 28 Properties prop = new Properties(); 29 prop.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties")); 30 31 //2 獲取DataSource物件 32 ds = DruidDataSourceFactory.createDataSource(prop); 33 } catch (IOException e) { 34 e.printStackTrace(); 35 } catch (Exception e) { 36 e.printStackTrace(); 37 } 38 } 39 40 41 /** 42 * 獲取連線物件 43 * @return 44 * @throws SQLException 45 */ 46 public static Connection getConnection() throws SQLException { 47 return ds.getConnection(); 48 } 49 50 51 /** 52 * 釋放資源 53 * @param stmt 54 * @param conn 55 */ 56 public static void close(Statement stmt, Connection conn){ 57 /*if (stmt != null){ 58 try { 59 stmt.close(); 60 } catch (SQLException e) { 61 e.printStackTrace(); 62 } 63 } 64 65 if (conn != null){ 66 try { 67 conn.close(); //此處實質不是釋放資源,而是將連線物件歸還給連線池 68 } catch (SQLException e) { 69 e.printStackTrace(); 70 } 71 }*/ 72 73 close(null, stmt, conn); 74 } 75 76 77 /** 78 * 釋放資源 79 * @param rs 80 * @param stmt 81 * @param conn 82 */ 83 public static void close(ResultSet rs, Statement stmt, Connection conn){ //過載 84 if (rs != null){ 85 try { 86 rs.close(); 87 } catch (SQLException e) { 88 e.printStackTrace(); 89 } 90 } 91 92 if (stmt != null){ 93 try { 94 stmt.close(); 95 } catch (SQLException e) { 96 e.printStackTrace(); 97 } 98 } 99 100 if (conn != null){ 101 try { 102 conn.close(); //此處實質不是釋放資源,而是將連線物件歸還給連線池 103 } catch (SQLException e) { 104 e.printStackTrace(); 105 } 106 } 107 } 108 109 110 /** 111 * 獲取連線池物件 112 * @return DataSource ds 113 */ 114 public static DataSource getDataSource(){ 115 return ds; 116 } 117 }
1 package com.haifei.datasource.druid; 2 3 import com.haifei.utils.JDBCUtils; 4 5 import java.sql.Connection; 6 import java.sql.PreparedStatement; 7 import java.sql.SQLException; 8 9 /* 10 測試新的JDBCUtils:Druid連線池工具類 11 12 需求:給account表新增一條記錄 13 */ 14 public class DruidDemo2 { 15 public static void main(String[] args) { 16 17 Connection conn = null; 18 PreparedStatement pstmt = null; 19 20 try { 21 //1 獲取連線conn物件 22 conn = JDBCUtils.getConnection(); 23 24 //2 定義sql 25 String sql = "insert into account values(null, ?, ?)"; 26 27 //3 獲取執行sql的pstmt物件 28 pstmt = conn.prepareStatement(sql); 29 30 //4 給sql中的?賦值 31 pstmt.setString(1, "wangwu"); 32 pstmt.setDouble(2, 3000); 33 34 //5 執行sql 35 int count = pstmt.executeUpdate(); 36 System.out.println(count); //1 37 38 } catch (SQLException e) { 39 e.printStackTrace(); 40 } finally { 41 JDBCUtils.close(pstmt, conn); 42 } 43 44 } 45 }