basicdatasourcefactory mysql_Java基礎-DBCP連接池(BasicDataSource類)詳解

Java基礎-DBCP連接池(BasicDataSource類)詳解

作者:尹正杰

版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

實際開發中“獲得連接”或“釋放資源”是非常消耗系統資源的兩個過程,為了解決此類性能問題,通常情況我們采用連接池技術,來共享連接Connection。這樣我們就不需要每次都創建連接、釋放連接了,這些操作都交給了連接池。

一.連接池概述

1>.什么是連接池

用池來管理Connection,這樣可以重復使用Connection。有了池,所以我們就不用自己來創建Connection,而是通過池來獲取Connection對象。當使用完Connection后,調用Connection的close()方法也不會真的關閉Connection,而是把Connection“歸還”給池。池就可以再利用這個Connection對象了。

3cd6c2e848b4418382e26c4bdd05ba0d.png

2>.規范

Java為數據庫連接池提供了公共的接口:javax.sql.DataSource,各個廠商需要讓自己的連接池實現這個接口。這樣應用程序可以方便的切換不同廠商的連接池!常見的連接池:DBCP、C3P0。本篇博客的主角是DBCP連接池。

二.DBCP連接池

DBCP也是一個開源的連接池,是Apache Common成員之一,在企業開發中也比較常見,tomcat內置的連接池。如果我們想要使用它的功能的話,需要導入jar包,可以用Maven方式進行下載包,它可以幫我們解決一些依賴關系。Maven的使用請參考:http://www.cnblogs.com/yinzhengjie/p/9017416.html

1>.導入連接池jar包

e1be5913569b5f2b1836c7c014987609.png

2>.常見配置項

分類

屬性

描述

必須項

driverClassName

數據庫驅動名稱

url

數據庫的地址

username

用戶名

password

密碼

基本項(擴展)

maxActive

最大連接數量

minIdle

最小空閑連接

maxIdle

最大空閑連接

initialSize

初始化連接

三.BasicDataSource類的使用

1>.準備數據庫實驗環境

1 /*

2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E7%B2%BE%E9%80%9A/

4 EMAIL:y1053419035@qq.com5 */

6

7 CREATE TABLE Teacher(8 idINT PRIMARY KEY AUTO_INCREMENT,9 Name varchar(30) COLLATE gbk_bin DEFAULT NULL,10 Age intDEFAULT NULL,11 Job varchar(50),12 JobDescription varchar(100)13 );

2>.代碼如下:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 #@author :yinzhengjie2 #Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

3 #EMAIL:y1053419035@qq.com4 #5 DriverName=com.mysql.jdbc.Driver6 url=jdbc:mysql://192.168.0.254:5200/yinzhengjie?useServerPrepStmts=true&cachePrepStmts=true&rewriteBatchedStatements=true

7 username=root8 password=yinzhengjie9 initialSize=10

10 maxIdle=5

11 minIdle=3

12 maxActive=1

yinzhengjie.properties 文件內容

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 /*

2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

4 EMAIL:y1053419035@qq.com5 */

6 package cn.org.yinzhengjie.note3;7

8 import javax.sql.DataSource;9 import org.apache.commons.dbcp.BasicDataSource;10 import java.util.ResourceBundle;11

12 /**13 * 在dbcp連接池的jar中,有 一個定義好的BasicDataSource累,通過查看源碼,發現該實現類已經幫我們實現類了數據源的規范接口,即javax.sql.DataSource14 */

15 public class JDBCUtils {16

17 //創建DataSource接口的實現類對象(BasicDataSource),我們的dbcp工具包已經幫我們實現好了,咱們直接用就好!

18 private static BasicDataSource dataSource =new BasicDataSource();19

20 //定義數據庫鏈接變量

21 private static final String DRIVERNAME;22 private static final String URL;23 private static final String USERNAME;24 private static final String PASSWORD;25 private static final intINITIALSIZE;26 private static final intMAXIDLE;27 private static final intMINLDEL;28 private static final intMAXACTIVE;29

30 static {31 //注意,我在Windows的配置文件全名是:“yinzhengjie.properties”,但是我們在給ResourceBundle的getBundle傳參時應該注意兩件事:第一,只傳遞文件名稱并不傳遞文件后綴(即:yinzhengjie),第二,該文件應該在classpath中或者是跟包名在同一路徑(即:在src目錄中)

32 DRIVERNAME = ResourceBundle.getBundle("yinzhengjie").getString("DriverName");33 URL = ResourceBundle.getBundle("yinzhengjie").getString("url");34 USERNAME = ResourceBundle.getBundle("yinzhengjie").getString("username");35 PASSWORD = ResourceBundle.getBundle("yinzhengjie").getString("password");36 INITIALSIZE = Integer.parseInt( ResourceBundle.getBundle("yinzhengjie").getString("initialSize"));37 MAXIDLE = Integer.parseInt(ResourceBundle.getBundle("yinzhengjie").getString("maxIdle"));38 MINLDEL = Integer.parseInt(ResourceBundle.getBundle("yinzhengjie").getString("minIdle"));39 MAXACTIVE = Integer.parseInt(ResourceBundle.getBundle("yinzhengjie").getString("maxActive"));40 }41

42 //靜態代碼塊,對象BasicDataSource對象中的配置,自定義

43 static {44 //鏈接數據庫的4個最基本信息,通過對象的set方法進行設置如下:

45 dataSource.setDriverClassName(DRIVERNAME); //設置數據庫驅動

46 dataSource.setUrl(URL); //設置訪問數據庫的路徑

47 dataSource.setUsername(USERNAME); //設置登錄數據庫的用戶名

48 dataSource.setPassword(PASSWORD); //設置登錄數據庫的密碼49

50 //對象連接池中的常見配置項,以下的四個配置可以不配置(因為有默認配置),但是上面的四個是必須要配置的!

51 dataSource.setInitialSize(INITIALSIZE); //指定初始化的連接數

52 dataSource.setMaxActive(MAXIDLE); //指定最大鏈接數量

53 dataSource.setMaxIdle(MINLDEL); //指定最大空閑數

54 dataSource.setMinIdle(MAXACTIVE); //指定最小空閑數

55 }56

57 //定義靜態方法,返回BasicDataSource類的對象

58 public static DataSource getDataSource() {59 return dataSource;60 }61

62 }

JDBCUtils.java 文件內容

1 /*

2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/

4 EMAIL:y1053419035@qq.com5 */

6 package cn.org.yinzhengjie.note3;7

8 import java.sql.SQLException;9 import java.util.List;10 import java.util.Map;11

12 import org.apache.commons.dbutils.QueryRunner;13 import org.apache.commons.dbutils.handlers.ArrayListHandler;14 import org.apache.commons.dbutils.handlers.MapListHandler;15

16 public class QueryRunnerDemo {17 //定義兩個方法,實現數據表的添加,數據表查詢,QueryRunner類對象,寫在類成員位置

18 private static QueryRunner qr =new QueryRunner(JDBCUtils.getDataSource());19

20 public static void main(String[] args) {21 //insert();

22 select();23 }24

25 //數據表查詢

26 private static void select() {27 String sql = "SELECT * FROM Teacher where name = ?";28 try {29 String FirstArgs = "尹正杰";30 List> list =qr.query(sql, new MapListHandler(), FirstArgs);31 //遍歷集合list

32 for (Mapmap : list) {33 for(String key :map.keySet()){34 System.out.println(key + ":" +map.get(key) );35 }36 }37 } catch (SQLException e) {38 System.out.println(e);39 throw new RuntimeException("數據查詢失敗!");40 }41 }42

43 //數據表添加數據

44 private static void insert() {45 String sql = "INSERT INTO Teacher VALUES(null,?,?,?,?)";46 Object[] params = {"尹正杰",26,"高級云計算工程師","負責網站架構維護,維護上萬臺服務器正常運行!"};47

48 try {49 int row =qr.update(sql,params);50 if(row != 0) {51 System.out.println("添加成功");52 }53 } catch (SQLException e) {54 e.printStackTrace();55 throw new RuntimeException("數據添加失敗!");56 }57 }58 }

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370568.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370568.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370568.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

生物神經網絡衍生出的算法

一個生物神經網絡的基本結構: 生物神經網絡由大量神經元組成,這些神經元之間通過突觸相互連接。神經元可以接收來自其他神經元的信號,并根據信號的強度和類型來調整自己的輸出信號。這種神經元之間的相互連接和信號傳遞形成了生物神經網絡的基…

echart實例數據 本地加載_JVM 類加載概述

來源:SegmentFault 思否社區作者:又壞又迷人JVM簡介JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用于計算設備的規范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。Ja…

JPA / Hibernate:基于版本的樂觀并發控制

本文是Hibernate和JPA中基于版本的樂觀并發控制的簡介。 這個概念已經很老了,上面已經寫了很多東西,但是無論如何我都看到了它被重新發明,誤解和濫用。 我在編寫它只是為了傳播知識,并希望引起人們對并發控制和鎖定的興趣。 用例…

高可用集群搭建

高可用集群搭建  創建hadoop賬戶 創建hadoop賬戶(#注意,接下來的操作均在hadoop賬戶下運行) # useradd hadoop # passwd hadoopsu - hadoopmkdir soft disk1 disk2mkdir -p disk{1,2}/dfs/{dn,nn}mkdir -p disk{1,2}/nodemgr/local 將本地目…

scrt如何切換成英文版_英文版SecureCRT顯示亂碼解決

英文版SecureCRT顯示亂碼解決系統環境:CentOS5.6以前Linux都是默認安裝在英文環境下,用英文版的SecureCRT查看系統內容輸出的也都是英文的,不會出現亂碼問題。今天同事在服務器安裝時默認選擇了簡體中文,這…

java try catch_Java捕獲異常

大家好,歡迎來到樂字節小樂的Java技術分享園地在Java中,凡是可能拋出異常的語句,都可以用try ... catch捕獲。把可能發生異常的語句放在try { ... }中,然后使用catch捕獲對應的Exception及其子類。多catch語句可以使用多個catch語…

haproxy文件操作

import os #導入os模塊def search(): #定義查找函數 with open(haproxy.txt,r) as f: #只讀方式打開文件 value input(請輸入您…

多語言持久性:帶有MongoDB和Derby的EclipseLink

從現在開始,多語種持久性一直是新聞。 從2011年底開始,在著名的Fowler帖子的推動下,我看到了更多更好的主意。 最新的一個是公司內部的學生項目,我們在其中使用Scala作為后端數據,將數據持久存儲到MongoDB,…

web前端開發最佳實踐--(筆記之JavaScript最佳實踐)

如何避免全局變量污染? 避免定義全局變量或全局函數用一個變量進行封裝,并返回外部需要訪問的接口如何寫出高維護的js代碼 配置數據和代碼邏輯分離 如: 改成: ---用js模板mustachehandlebarsjsMVC的數據模式 model:數據…

yum mysql5.7位置_CentOS yum 安裝 Mysql5.7

1 Steps for a Fresh Installation of MySQL# wget https://dev.mysql.com/get/mysql57-community-release-el6-9.noarch.rpm# yum localinstall mysql57-community-release-el6-9.noarch.rpm以上步驟其實是把 MySQL Yum repository 添加到了系統的 repository list 里去了。ll…

HTML/CSS基礎知識(四)

WEB標準和W3C的理解與認識 Web標準是一系列標準的集合。 網頁主要由三部分組成:結構(Structure)、表現(Presentation)和行為(Behavior)。 對應的標準也分三方面:結構化標準語言主要包…

python做一個系統代碼_python初學者,用python3實現基本的學生管理系統代碼實例...

這篇文章分享了管理系統,python學生管理系統的使用,這篇文章非常詳細地介紹了通過示例代碼實現的學生管理系統,該系統對每個人的研究或工作都有一定的參考學習價值。 這個是用python實現的基本的增刪改查的學生管理系統吧,其中主要…

Python入門筆記

Python變量和數據類型 數據類型 print語句 注釋 Python的注釋以 # 開頭,后面的文字直到行尾都算注釋 # 這一行全部都是注釋... print hello # 這也是注釋 什么是變量 定義字符串 字符串可以用或者""括起來表示。 如果字符串本身包含怎么辦?比如…

1058. 選擇題(20)

原題: https://www.patest.cn/contests/pat-b-practise/1058 思路: 本題主要就是怎么讀取數據的問題, 一定要注意scanf函數匹配到 空格或者回車會結束當前變量的賦值, 并且會丟棄這個空格或回車. 關于如何判斷一項答題是否正確, 可以采用循環一個一個判斷, 也可拼成 字符串用st…

使用Spring和Hibernate進行集成測試有多酷

我有罪,直到現在才寫集成測試(至少針對數據庫相關事務)。 因此,為了消除內感,我閱讀了如何在周末以最少的努力實現這一目標。 提供了一個小示例,描述了如何使用Spring和Hibernate輕松實現這一目標。 通過集…

假設mysql數據表t1有字段_使用ROMA Connect集成數據

概述ROMA Connect支持接入多種類型的數據源,并通過數據集成任務實現源端到目標端的數據集成轉換。ROMA Connect支持相同結構數據之間進行集成轉換,也支持異構數據之間進行集成轉換。本章節通過完成一個SQL Server到MySQL的數據集成配置樣例,幫…

vue-wechat-title

html中的title安裝:npm install vue-wechat-title --save1.在mian.js中//網頁titleimport VueTitle from vue-wechat-title Vue.use(VueTitle);2. 路由中加下 title { path: /, component: Index, meta: { title: 首頁 } }3. 在app.vue 中修改 router-view &a…

如何保證input的輸入值不會隨著提交 而變空_如何對web界面的應用進行測試?

一、輸入框:1、字符型輸入框:(1)字符型輸入框:英文全角、英文半角、數字、空或者空格、特殊字符“~!#¥%……&*?[]{}”特別要注意單引號和&符號。禁止直接輸入特殊字符時&…

CentOS6.x下,tomcat - web項目部署

1. 安裝tomcat tomcat安裝方法&#xff1a;http://www.cnblogs.com/vurtne-lu/p/6478440.html 2. 配置tomcat 修改server.xml文件 <!-- 使用 80 端口 (也可以使用其它端口)--> <Connector port"80" protocol"HTTP/1.1"connectionTimeout"200…

dedecms列表頁面隨機縮略圖調用

如果要利用dedecms制作扁平化主題&#xff0c;大概也能夠遇到相似的問題&#xff0c;那就是dedecms的縮略圖機制&#xff0c;在沒有縮略圖的情況下顯示單一的默認圖片&#xff0c;如果是wordpress可以很方便的定義函數調用隨機的縮略圖&#xff0c;即便是在沒有設置縮略圖并且文…