資料庫連線池 —— Druid的簡單使用
阿新 • • 發佈:2020-02-19
Druid不僅是一個數據庫連線池,還包含一個ProxyDriver、一系列內建的JDBC元件庫、一個SQL Parser。支援所有JDBC相容的資料庫,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。
使用步驟
一定要匯入jar架包。要配置好檔案,如果不配置檔案,記得在程式中自行新增。
- 匯入jar包: druid-1.0.9.jar、mysql-connector-java-5.1.48.jar
- 定義配置檔案:可以命名為druid-1.0.9.properties
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://MySQL地址/資料庫名 username=使用者名稱 password=密碼 initialSize=初始化連線數 maxActive=最大連線數 maxWait=最大等待時間(毫秒為單位)
- 載入配置檔案druid-1.0.9.properties
- 獲取連線池物件
- 獲取資料庫連線
舉例如下:
package my.view.datasource.druid; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.sql.Connection; import java.util.Properties; public class DruidDemo { public static void main(String[] args) throws Exception { // 獲取載入配置檔案的物件 Properties properties = new Properties(); // 獲取類的類載入器 ClassLoader classLoader = DruidDemo.class.getClassLoader(); // 獲取druid-1.0.9.properties配置檔案資源輸入流 InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties"); // 載入配置檔案 properties.load(resourceAsStream); // 獲取連線池物件 DataSource dataSource = DruidDataSourceFactory.createDataSource(properties); // 獲取資料庫連線物件 Connection connection = dataSource.getConnection(); // 列印獲取到的資料庫連線物件地址值 System.out.println(connection); } }
定義一個建立資料庫連線池物件的類
在使用資料庫連線池的時候,我們不可能說每次都如上例中的情況自己寫一遍吧。我們可以自定義一個工具類,用來建立資料庫連線池物件,這個時候,我們乳溝想要建立資料庫連線池物件,直接呼叫該工具類即可。
建立工具類例項
定義獲取資料庫連線池物件的方法
/** * 資料庫連線物件 */ private static DataSource dataSource; /* 獲取資料庫連線池物件 */ static { try { // 獲取載入配置檔案的物件 Properties properties = new Properties(); // 獲取類的類載入器 ClassLoader classLoader = JdbcUtils.class.getClassLoader(); // 獲取druid-1.0.9.properties配置檔案資源輸入流 InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties"); // 載入配置檔案 properties.load(resourceAsStream); // 獲取連線池物件 dataSource = DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } /** * 獲取連線池物件 */ public static DataSource getDataSource() { return dataSource; }
定義獲取資料庫連線物件的方法
/** * 獲取資料庫連線物件 */ public static Connection getConnection() throws Exception { return dataSource.getConnection(); }
定義釋放資源的方法
/** * 歸還連線 * @param t 要被歸還到熟即可連線池物件的資料庫連線物件 * @param <T> 資料庫連線物件的型別 */ public static <T> void releaseResources (T t){ if(t != null){ try { // 利用反射,獲取class物件 Class<?> aClass = t.getClass(); // 獲取class物件中的方法物件 Method close = aClass.getMethod("close"); // 執行方法 close.invoke(t); } catch (Exception e) { e.printStackTrace(); } } }
該工具類總的程式碼:
package my.view.utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.lang.reflect.Method; import java.sql.Connection; import java.util.Properties; public class JdbcUtils { /** * 資料庫連線物件 */ private static DataSource dataSource; /* 獲取資料庫連線池物件 */ static { try { // 獲取載入配置檔案的物件 Properties properties = new Properties(); // 獲取類的類載入器 ClassLoader classLoader = JdbcUtils.class.getClassLoader(); // 獲取druid-1.0.9.properties配置檔案資源輸入流 InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties"); // 載入配置檔案 properties.load(resourceAsStream); // 獲取連線池物件 dataSource = DruidDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } /** * 獲取連線池物件 */ public static DataSource getDataSource() { return dataSource; } /** * 獲取資料庫連線物件 */ public static Connection getConnection() throws Exception { return dataSource.getConnection(); } /** * 歸還連線 * @param t 要被歸還到熟即可連線池物件的資料庫連線物件 * @param <T> 資料庫連線物件的型別 */ public static <T> void releaseResources (T t){ if(t != null){ try { // 利用反射,獲取class物件 Class<?> aClass = t.getClass(); // 獲取class物件中的方法物件 Method close = aClass.getMethod("close"); // 執行方法 close.invoke(t); } catch (Exception e) { e.printStackTrace(); } } } }
使用上面建立個工具類例項
有如下一個資料表格
CREATE TABLE account ( id INT PRIMARY KEY AUTO_INCREMENT, -- id NAME VARCHAR(10), -- 名字 balance DOUBLE -- 餘額 ); INSERT INTO account (NAME, balance) VALUES ('LeeHua', 1000), ('Tom', 1000);
向該表格中插入一條資料,實現如下:
package my.view.datasource.druid; import my.view.utils.JdbcUtils; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; public class JdbcUtilsDemo { public static void main(String[] args) throws Exception{ // 獲取資料庫連線池物件 DataSource dataSource = JdbcUtils.getDataSource(); // 從資料庫連線池物件中獲取資料庫連線物件 Connection connection = dataSource.getConnection(); // 預定義定義SQL語句 String sql = "INSERT INTO account (NAME, balance) VALUES (?, ?);"; // 獲取執行預定義SQL語句物件 PreparedStatement preparedStatement = connection.prepareStatement(sql); // 給?賦值 preparedStatement.setString(1, "WanWu"); preparedStatement.setInt(2, 2000); // 執行預編譯好的SQL語句 preparedStatement.executeUpdate(); // 釋放資源:PreparedStatement JdbcUtils.releaseResources(preparedStatement); // 歸還連線 JdbcUtils.releaseResources(connection); // 釋放資源:資料庫連線池 JdbcUtils.releaseResources(dataSource); } }
執行程式,然後查詢一下表記錄:
可以看到插入了一條資料,說明測試成功。
&n