日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库连接池技术,c3p0

發(fā)布時間:2025/7/25 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库连接池技术,c3p0 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

百度 谷歌? http://commons.apache.org/ ? 可以找到DBCP?? ,? 這里選擇使用C3P0,百度一下。https://www.mchange.com/projects/c3p0/

在maven 庫,找到C3p0添加到MAVEN的版本文件。

數(shù)據(jù)庫連接池的運(yùn)行機(jī)制

(1) 程序初始化時創(chuàng)建連接池
(2) 使用時向連接池申請可用連接
(3) 使用完畢,將連接返還給連接池
(4) 程序退出時,斷開所有連接,并釋放資源

?

?選擇使用最多的版本,復(fù)制添加到Maven依賴關(guān)系如下:

到maven項(xiàng)目中添加

接下來使用,連接一個數(shù)據(jù)庫測試

?

public class DbUtil {private static Connection conn = null; // 聲明Connection對象,Connection接口用于建立與特定數(shù)據(jù)庫的連接,私有private只能在本類調(diào)用private PreparedStatement pstmt;private ResultSet rs;// 使用單例模式式創(chuàng)建數(shù)據(jù)庫連接池private static ComboPooledDataSource dataSource;// 連接數(shù)據(jù)庫的構(gòu)造方法, 1加載驅(qū)動, 2建立連接, 3使用sql語句進(jìn)行數(shù)據(jù)庫操作, 4釋放資源。// (1)構(gòu)造方法的名字必須與定義他的類名完全相同,沒有返回類型,甚至連void也沒有;//// (2)構(gòu)造方法的調(diào)用是在創(chuàng)建一個對象時使用new操作進(jìn)行的。構(gòu)造方法的作用是初始化對象。// (3)每個類可以有零個或多個構(gòu)造方法;(4)不能被static、final、synchronized、abstract和native修飾。構(gòu)造方法不能被子類繼承。// (5)構(gòu)造方法在創(chuàng)建對象時自動執(zhí)行,一般不能顯式地直接調(diào)用。public static ComboPooledDataSource getDateSource() {if (dataSource == null) {try {dataSource = new ComboPooledDataSource();// try { 執(zhí)行的代碼,其中可能有異常。一旦發(fā)現(xiàn)異常,則立即跳到catch執(zhí)行。否則不會執(zhí)行catch里面的內(nèi)容 }// 獲取連接對象,地址,用戶名,密碼dataSource.setUser("root"); // 用戶名dataSource.setPassword(""); // 密碼dataSource.setDriverClass("com.mysql.jdbc.Driver"); // mysql數(shù)據(jù)庫驅(qū)動程序,這里可以換成你要的其他數(shù)據(jù)庫驅(qū)動程String url = "jdbc:mysql://localhost:3306/dev?characterEncoding=UTF-8";dataSource.setJdbcUrl(url);// 數(shù)據(jù)庫地址dataSource.setInitialPoolSize(5); // 初始化連接數(shù)dataSource.setMinPoolSize(1);// 最小連接數(shù)dataSource.setMaxPoolSize(10);// 最大連接數(shù)dataSource.setMaxStatements(50);// 最長等待時間dataSource.setMaxIdleTime(60);// 最大空閑時間,單位毫秒 System.out.println(dataSource);// System.out.println("連接mysql數(shù)據(jù)庫成功");// 控制臺輸出// catch { 除非try里面執(zhí)行代碼發(fā)生了異常,否則這里的代碼不會執(zhí)行 }} catch (Exception e) {// 這將捕獲任何發(fā)生的異常。另外,還提供e參數(shù),可以在處理異常時使用e參數(shù)來獲得有關(guān)異常的信息。 e.printStackTrace();}}return dataSource;}public static Connection getConnection() {if (conn == null) {try {conn = getDateSource().getConnection();} catch (SQLException e) {// TODO Auto-generated catch block e.printStackTrace();}}return conn;}/*** 主要針對增,刪,改的通用方法* * @param sql* 要執(zhí)行的SQL語句(insert, delete, updata)* @param paramsValue* 參數(shù)數(shù)組,用來處理SQL語句中的占位符參數(shù),如果沒有參數(shù),請傳入null*/public void update(String sql, String[] str) {try {// 2. 獲取PreparedStatementpstmt =getConnection().prepareStatement(sql);// 3. 得到參數(shù)元數(shù)據(jù)個數(shù)int count = pstmt.getParameterMetaData().getParameterCount();// 4. 利用參數(shù)元數(shù)據(jù)給SQL語句的占位符需要的參數(shù)賦值if (str != null && str.length > 0) {for (int i = 0; i < count; i++) {// 循環(huán)結(jié)束,就是可以給SQL語句完整賦值pstmt.setObject(i + 1, str[i]);}}// 5. 執(zhí)行 pstmt.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);} finally {closeAll();}}/*** 查詢語句* * @param sql* SQL語句* @param params* SQL語句* @return ResultSet結(jié)果集*/public ResultSet executeQueryRS(String sql, Object[] params) {try {pstmt =getConnection().prepareStatement(sql);for (int i = 0; i < params.length; i++) {pstmt.setObject(i + 1, params[i]);}rs = pstmt.executeQuery();} catch (SQLException e) {System.out.println(e.getMessage());}return rs;}/*** 獲取結(jié)果集,并將結(jié)果放在List中* * @param sql* SQL語句* @return List結(jié)果集*/public List<Object> excuteQuery(String sql, Object[] params) {ResultSet rs = executeQueryRS(sql, params);ResultSetMetaData rsmd = null;int columnCount = 0;try {rsmd = rs.getMetaData();columnCount = rsmd.getColumnCount();} catch (SQLException e1) {System.out.println(e1.getMessage());}List<Object> list = new ArrayList<Object>();try {while (rs.next()) {Map<String, Object> map = new HashMap<String, Object>();for (int i = 1; i <= columnCount; i++) {map.put(rsmd.getColumnLabel(i), rs.getObject(i));}list.add(map);}} catch (SQLException e) {System.out.println(e.getMessage());} finally {closeAll();}return list;}private void closeAll() {if (rs != null) {try {rs.close();} catch (SQLException e) {System.out.println(e.getMessage());}}if (pstmt != null) {try {pstmt.close();} catch (SQLException e) {System.out.println(e.getMessage());}}}

使用C3p0,連接數(shù)據(jù)庫成功。并查詢數(shù)據(jù)成功。

轉(zhuǎn)載于:https://www.cnblogs.com/TangGe520/p/9052117.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的数据库连接池技术,c3p0的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。