Druid不只是一個數據庫鏈接池,還包含一個ProxyDriver、一系列內置的JDBC組件庫、一個SQL Parser。支持全部JDBC兼容的數據庫,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。html
必定要導入jar架包。要配置好文件,若是不配置文件,記得在程序中自行添加。java
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://MySQL地址/數據庫名 username=用戶名 password=密碼 initialSize=初始化鏈接數 maxActive=最大鏈接數 maxWait=最大等待時間(毫秒爲單位)
舉例以下:mysql
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); } }
在使用數據庫鏈接池的時候,咱們不可能說每次都如上例中的狀況本身寫一遍吧。咱們能夠自定義一個工具類,用來建立數據庫鏈接池對象,這個時候,咱們乳溝想要建立數據庫鏈接池對象,直接調用該工具類便可。sql
定義獲取數據庫鏈接池對象的方法數據庫
/** * 數據庫鏈接對象 */ 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(); } } }
該工具類總的代碼:ui
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(); } } } }
有以下一個數據表格url
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);
向該表格中插入一條數據,實現以下:spa
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); } }
運行程序,而後查詢一下表記錄:
能夠看到插入了一條數據,說明測試成功。