basicdatasourcefactory mysql_Java基础-DBCP连接池(BasicDataSource类)详解
Java基礎(chǔ)-DBCP連接池(BasicDataSource類)詳解
作者:尹正杰
版權(quán)聲明:原創(chuàng)作品,謝絕轉(zhuǎn)載!否則將追究法律責(zé)任。
實際開發(fā)中“獲得連接”或“釋放資源”是非常消耗系統(tǒng)資源的兩個過程,為了解決此類性能問題,通常情況我們采用連接池技術(shù),來共享連接Connection。這樣我們就不需要每次都創(chuàng)建連接、釋放連接了,這些操作都交給了連接池。
一.連接池概述
1>.什么是連接池
用池來管理Connection,這樣可以重復(fù)使用Connection。有了池,所以我們就不用自己來創(chuàng)建Connection,而是通過池來獲取Connection對象。當(dāng)使用完Connection后,調(diào)用Connection的close()方法也不會真的關(guān)閉Connection,而是把Connection“歸還”給池。池就可以再利用這個Connection對象了。
2>.規(guī)范
Java為數(shù)據(jù)庫連接池提供了公共的接口:javax.sql.DataSource,各個廠商需要讓自己的連接池實現(xiàn)這個接口。這樣應(yīng)用程序可以方便的切換不同廠商的連接池!常見的連接池:DBCP、C3P0。本篇博客的主角是DBCP連接池。
二.DBCP連接池
DBCP也是一個開源的連接池,是Apache Common成員之一,在企業(yè)開發(fā)中也比較常見,tomcat內(nèi)置的連接池。如果我們想要使用它的功能的話,需要導(dǎo)入jar包,可以用Maven方式進行下載包,它可以幫我們解決一些依賴關(guān)系。Maven的使用請參考:http://www.cnblogs.com/yinzhengjie/p/9017416.html
1>.導(dǎo)入連接池jar包
2>.常見配置項
分類
屬性
描述
必須項
driverClassName
數(shù)據(jù)庫驅(qū)動名稱
url
數(shù)據(jù)庫的地址
username
用戶名
password
密碼
基本項(擴展)
maxActive
最大連接數(shù)量
minIdle
最小空閑連接
maxIdle
最大空閑連接
initialSize
初始化連接
三.BasicDataSource類的使用
1>.準備數(shù)據(jù)庫實驗環(huán)境
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>.代碼如下:
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 文件內(nèi)容
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累,通過查看源碼,發(fā)現(xiàn)該實現(xiàn)類已經(jīng)幫我們實現(xiàn)類了數(shù)據(jù)源的規(guī)范接口,即javax.sql.DataSource14 */
15 public class JDBCUtils {16
17 //創(chuàng)建DataSource接口的實現(xiàn)類對象(BasicDataSource),我們的dbcp工具包已經(jīng)幫我們實現(xiàn)好了,咱們直接用就好!
18 private static BasicDataSource dataSource =new BasicDataSource();19
20 //定義數(shù)據(jù)庫鏈接變量
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傳參時應(yīng)該注意兩件事:第一,只傳遞文件名稱并不傳遞文件后綴(即:yinzhengjie),第二,該文件應(yīng)該在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 //靜態(tài)代碼塊,對象BasicDataSource對象中的配置,自定義
43 static {44 //鏈接數(shù)據(jù)庫的4個最基本信息,通過對象的set方法進行設(shè)置如下:
45 dataSource.setDriverClassName(DRIVERNAME); //設(shè)置數(shù)據(jù)庫驅(qū)動
46 dataSource.setUrl(URL); //設(shè)置訪問數(shù)據(jù)庫的路徑
47 dataSource.setUsername(USERNAME); //設(shè)置登錄數(shù)據(jù)庫的用戶名
48 dataSource.setPassword(PASSWORD); //設(shè)置登錄數(shù)據(jù)庫的密碼49
50 //對象連接池中的常見配置項,以下的四個配置可以不配置(因為有默認配置),但是上面的四個是必須要配置的!
51 dataSource.setInitialSize(INITIALSIZE); //指定初始化的連接數(shù)
52 dataSource.setMaxActive(MAXIDLE); //指定最大鏈接數(shù)量
53 dataSource.setMaxIdle(MINLDEL); //指定最大空閑數(shù)
54 dataSource.setMinIdle(MAXACTIVE); //指定最小空閑數(shù)
55 }56
57 //定義靜態(tài)方法,返回BasicDataSource類的對象
58 public static DataSource getDataSource() {59 return dataSource;60 }61
62 }
JDBCUtils.java 文件內(nèi)容
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 //定義兩個方法,實現(xiàn)數(shù)據(jù)表的添加,數(shù)據(jù)表查詢,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 //數(shù)據(jù)表查詢
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("數(shù)據(jù)查詢失敗!");40 }41 }42
43 //數(shù)據(jù)表添加數(shù)據(jù)
44 private static void insert() {45 String sql = "INSERT INTO Teacher VALUES(null,?,?,?,?)";46 Object[] params = {"尹正杰",26,"高級云計算工程師","負責(zé)網(wǎng)站架構(gòu)維護,維護上萬臺服務(wù)器正常運行!"};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("數(shù)據(jù)添加失敗!");56 }57 }58 }
總結(jié)
以上是生活随笔為你收集整理的basicdatasourcefactory mysql_Java基础-DBCP连接池(BasicDataSource类)详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 匡威的鞋多少钱啊?
- 下一篇: “收缆辞帝郊”上一句是什么