数据库连接池技术,c3p0
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                数据库连接池技术,c3p0
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                百度 谷歌? http://commons.apache.org/ ? 可以找到DBCP?? ,? 這里選擇使用C3P0,百度一下。https://www.mchange.com/projects/c3p0/
在maven 庫,找到C3p0添加到MAVEN的版本文件。
數(shù)據(jù)庫連接池的運行機制
(1) 程序初始化時創(chuàng)建連接池(2) 使用時向連接池申請可用連接
(3) 使用完畢,將連接返還給連接池
(4) 程序退出時,斷開所有連接,并釋放資源
?
?選擇使用最多的版本,復(fù)制添加到Maven依賴關(guān)系如下:
到maven項目中添加
接下來使用,連接一個數(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語句進行數(shù)據(jù)庫操作, 4釋放資源。// (1)構(gòu)造方法的名字必須與定義他的類名完全相同,沒有返回類型,甚至連void也沒有;//// (2)構(gòu)造方法的調(diào)用是在創(chuàng)建一個對象時使用new操作進行的。構(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ù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的数据库连接池技术,c3p0的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 数据关系模式设计的标准化
- 下一篇: Mac用户SVN图形界面推荐
