微信開發,解決使用者暱稱帶emoji圖示導致無法正常儲存暱稱到mysql問題(我的資料庫是mysql5.6)
阿新 • • 發佈:2020-12-18
編寫標準的資料來源(規範)
Java為資料庫連線池提供了公共的介面:javax.sql.DataSource
,各個廠商需要讓自己的連線池實現這個介面。這樣應用程式可以方便的切換不同廠商的連線池!
常見的第三方連線池如下:
- C3P0是一個開源的JDBC連線池,它實現了資料來源和JNDI繫結,支援JDBC3規範和JDBC2的標準擴充套件。C3P0是非同步操作的,所以一些操作時間過長的JDBC通過其它的輔助執行緒完成。目前使用它的開源專案有Hibernate,Spring等。C3P0有自動回收空閒連線功能
- 阿里巴巴-德魯伊druid連線池:Druid是阿里巴巴開源平臺上的一個專案,整個專案由資料庫連線池、外掛框架和SQL解析器組成。該專案主要是為了擴充套件JDBC的一些限制,可以讓程式設計師實現一些特殊的需求。
- DBCP(DataBase Connection Pool)資料庫連線池,是Apache上的一個Java連線池專案,也是Tomcat使用的連線池元件。dbcp沒有自動回收空閒連線的功能。
C3P0連線池
使用步驟
- 匯入c3p0-0.9.1.2.jar
- 拷貝配置檔案到src目錄
- 建立連線池(配置檔案自動讀取的)
- 編寫配置檔案 c3p0-config.xml
<c3p0-config> <!-- 使用預設的配置讀取連線池物件 --> <default-config> <!-- 連線引數 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/day19</property> <property name="user">root</property> <property name="password">root</property> <!-- 連線池引數 --> <property name="initialPoolSize">5</property> </default-config> </c3p0-config>
c3p0連線池常用的配置引數:
引數 | 說明 |
---|---|
initialPoolSize | 初始連線數 |
maxPoolSize | 最大連線數 |
checkoutTimeout | 最大等待時間 |
maxIdleTime | 最大空閒回收時間 |
初始連線數
:剛建立好連線池的時候準備的連線數量
最大連線數
:連線池中最多可以放多少個連線
最大等待時間
:連線池中沒有連線時最長等待時間
最大空閒回收時間
:連線池中的空閒連線多久沒有使用就會回收
編寫Java程式碼
/** * C3P0連線池的工具類 * */ public class C3P0Utils { //1. 建立一個C3P0的連線池物件(會自動讀取src目錄下的c3p0-config.xml,所以不需要我們解析配置檔案) public static DataSource ds = new ComboPooledDataSource(); //2. 提供 從連線池中 獲取連線物件的方法 public static Connection getConnection() throws SQLException { Connection conn = ds.getConnection(); return conn; } //3. 提供 獲得資料來源(連線池物件)的方法 public static DataSource getDataSource(){ return ds; } }
Druid 連線池
Druid是阿里巴巴開發的號稱為監控而生的資料庫連線池,Druid是國內目前最好的資料庫連線池。在功能、效能、擴充套件性方面,都超過其他資料庫連線池。Druid已經在阿里巴巴部署了超過600個應用,經過一年多生產環境大規模部署的嚴苛考驗。如:一年一度的雙十一活動,每年春運的搶火車票。
Druid的下載地址:
DRUID連線池使用的jar包:druid-1.1.16.jar
Druid連線池工具類編寫
步驟:
- 匯入DRUID jar 包
- 拷貝配置檔案到src目錄
- 根據配置檔案 建立連線池物件
- 從連線池物件獲得連線
實現:
建立druid.properties, 放在src目錄下
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/day19
username=root
password=root
編寫Java程式碼
/**
* 阿里巴巴的連線池 Druid 工具類
*/
public class DruidUtils {
/*
1. 載入 druid.properties 配置檔案
2. 建立 Druid 連線池物件
3. 提供 獲得 連線池物件的方法
4. 提供 從連線池中 獲取連線物件Connection的 方法
*/
public static DataSource ds = null;
static {
try {
//1. 載入 druid.properties 配置檔案
InputStream is = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
Properties prop = new Properties();
prop.load(is);
//2. 建立 Druid 連線池物件
ds = DruidDataSourceFactory.createDataSource(prop);
} catch (Exception e) {
e.printStackTrace();
}
}
/*
3. 提供 獲得 連線池物件的方法
*/
public static DataSource getDataSource(){
return ds;
}
/*
4. 提供 從連線池中 獲取連線物件Connection的 方法
*/
public static Connection getConnetion() throws SQLException {
Connection conn = ds.getConnection();
return conn;
}
}