概念: 數據庫連接池其實就是一個容器(集合),存放數據庫連接的容器。當系統初始化好後,容器被創建,容器中會保存一些連接對象,當用戶來訪問數據庫時,從容器中獲取連接對象,用戶訪問完之後將連接對象歸還給容器。
優點 :數據庫連接池的使用,即節約了資源,又能給用戶高效的訪問。
Druid:數據庫連接池實現技術,由阿里巴巴提供的
步驟:
1.導入jar包,druid-x.x.x.jar
2.定義配置文件:
* 是properties形式的
* 可以叫任意名稱,可以放在任意目錄下
3. 加載配置文件。Properties
4. 獲取數據庫連接池對象:通過工廠來來獲取 DruidDataSourceFactory
5. 獲取連接:getConnection
jar&配置文件資源連接(配置文件中修改成自己的數據庫和用戶名、密碼)(https://pan.baidu.com/s/12dx5HAQotD8xKt_iHgI_iw 提取碼:f6b2)
代碼:
druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db_exer
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
DruidDemo.java
package com.yang.demo.druid;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
* @author WangYang
* @version 1.0
* @create 2020-02-28 14:21
* druid 連接池的使用
*/
public class DruidDemo {
private static Connection conn;
public static void main(String[] args) {
try {
Properties pro = new Properties();
pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("druid.properties"));
DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
conn = dataSource.getConnection();
System.out.println(conn);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally{
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
將DruidDemo.java 進行提取封裝成JDBCUtils工具類
JDBCUtils.java工具類
package com.yang.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* @author WangYang
* @version 1.0
* @create 2020-02-28 14:33
*
* druid JDBC工具類
*/
public class JDBCUtils {
private static DataSource dataSource;
static {
try {
//加載druid.properties 配置文件
Properties pro = new Properties();
pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("druid.properties"));
//初始化連接池對象
dataSource = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 獲取連接對象
* @return 連接對象
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
public static void close(ResultSet rs, Statement st, Connection conn){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st != null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close(); //連接對象,歸還到連接池中
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
測試類 DruidJDBCUtilsDemo.java
package com.yang.demo.druid;
import com.alibaba.druid.util.JdbcUtils;
import com.yang.utils.JDBCUtils;
import java.sql.*;
/**
* @author WangYang
* @version 1.0
* @create 2020-02-28 14:44
* 測試封裝的Druid JDBC 工具類
*/
public class DruidJDBCUtilsDemo {
private static Connection conn;
private static PreparedStatement ps;
private static ResultSet rs;
public static void main(String[] args) {
try {
//獲取連接對象,執行sql語句
conn = JDBCUtils.getConnection();
String sql = "select * from emp";
ps = conn.prepareStatement(sql);
//獲取結果集
ResultSet rs = ps.executeQuery();
//處理結果集
while (rs.next()){
//將結果集裏的每一行數據的id打印
System.out.println(rs.getInt("id"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
//歸還連接對象
JDBCUtils.close(rs,ps,conn);
}
}
}
運行結果
數據庫中數據
對比結果圖和數據庫中的數據,druid工具類沒問題。