數據庫連接池(DBCP、C3P0、Druid); Commons DbUtils工具類庫

數據庫連接池

爲什麼要有連接池?

​ 由於建立數據庫連接是一種非常耗時、耗資源的行爲,所以通過連接池預先同數據庫建立一些連接,放在內存中,應用程序需要建立數據庫連接時直接到連接池中申請一個就行,使用完畢後再歸還到連接池中,能明顯提高對數據庫操作的性能。

一、DBCP連接池

​ DBCP(DataBase Connection Pool)數據庫連接池,是Java數據庫連接池的一種,由Apache開發,通過數據庫連接池,可以讓程序自動管理數據庫連接的釋放和斷開。

使用步驟:

1、導入 jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar)

2、配置信息

採用硬編碼方式

	//創建連接池
	BasicDataSource ds = new BasicDataSource();
	//配置信息
	ds.setDriverClassName("com.mysql.jdbc.Driver");
	ds.setUrl("jdbc:mysql:///mydb");
	ds.setUsername("root");
	ds.setPassword("123456");
	//ds.setMaxWait(5000); //設置最大等待連接時間
	//其他參數也可自行調用方法設置,不設置即爲默認值

採用配置文件方式

Java代碼
	Properties properties = new Properties();
    properties.load(new FileReader("src/dbcp.properties"));
	//創建一個工廠,獲取連接池
    DataSource ds = new BasicDataSourceFactory().createDataSource(properties);
配置文件
#連接基本設置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
username=root
password=123456

#<!--擴展配置 瞭解-->
#初始化連接
initialSize=10

#最大連接數量
maxActive=50

#<!-- 最大空閒連接 -->
maxIdle=20

#<!-- 最小空閒連接 -->
minIdle=5

#<!-- 超時等待時間以毫秒爲單位 6000毫秒/1000等於60秒 -->
maxWait=60000

#JDBC驅動建立連接時附帶的連接屬性屬性的格式必須爲這樣:[屬性名=property;] 
#注意:"user" 與 "password" 兩個屬性會被明確地傳遞,因此這裏不需要包含他們。
connectionProperties=useUnicode=true;characterEncoding=gbk

#指定由連接池所創建的連接的自動提交(auto-commit)狀態。
defaultAutoCommit=true

#driver default 指定由連接池所創建的連接的只讀(read-only)狀態。
#如果沒有設置該值,則“setReadOnly”方法將不被調用。(某些驅動並不支持只讀模式,如:Informix)
defaultReadOnly=

#driver default 指定由連接池所創建的連接的事務級別(TransactionIsolation)。
#可用值爲下列之一:(詳情可見javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED

3、獲取連接對象

Connection conn = ds.getConnection();

二、C3P0連接池

​ C3P0是一個開源的JDBC連接池,它實現了數據源和JNDI綁定,支持JDBC3規範和JDBC2的標準擴展。目前使用它的開源項目有Hibernate、Spring等。

使用步驟:

1、導入jar包(c3p0-0.9.1.2.jar)

2、配置信息

採用硬編碼方式

	ComboPooledDataSource ds = new ComboPooledDataSource();
	//設置基本參數
	ds.setDriverClass("com.mysql.jdbc.Driver");
	ds.setJdbcUrl("jdbc:mysql:///mydb");
	ds.setUser("root");
	ds.setPassword("123456");

採用配置文件方式

採用此方式需注意:

要求1:配置文件的名稱:c3p0.properties 或者 c3p0-config.xml

要求2:配置文件的路徑:必須在 src 下

	//new ComboPooledDataSource()	//使用默認的配置

	//使用命名的配置 若配置的名字找不到,使用默認的配置
	//new ComboPooledDataSource(String configName)
	
	//c3p0-config.xml的第二種配置
    ComboPooledDataSource ds = new ComboPooledDataSource("MyConfig");
c3p0.properties
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql:///mydb
c3p0.user=root
c3p0.password=123456
c3p0-config.xml
<c3p0-config>
	<!-- 默認配置,如果沒有指定則使用這個配置 -->
	<default-config>
		<!-- 基本配置 -->
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/mydb</property>
		<property name="user">root</property>
		<property name="password">123456</property>
	
		<!--擴展配置-->
		<property name="checkoutTimeout">30000</property>
		<property name="idleConnectionTestPeriod">30</property>
		<property name="initialPoolSize">10</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="maxStatements">200</property>
	</default-config> 
	
	
	<!-- 命名的配置 第二配置 -->
	<named-config name="MyConfig">
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/mydb</property>
		<property name="user">root</property>
		<property name="password">123456</property>

		<!--擴展配置-->
		<property name="acquireIncrement">5</property>
		<property name="initialPoolSize">20</property>
		<property name="minPoolSize">10</property>
		<property name="maxPoolSize">40</property>
		<property name="maxStatements">20</property>
		<property name="maxStatementsPerConnection">5</property>
	</named-config>
</c3p0-config>

3、獲取連接對象

Connection conn = ds.getConnection();

三、Druid 阿里德魯伊連接池

​ DRUID是阿里巴巴開源平臺上一個數據庫連接池實現,它結合了C3P0、DBCP、PROXOOL等DB池的優點,同時加入了日誌監控,可以很好的監控DB池連接和SQL的執行情況,可以說是針對監控而生的DB連接池。

使用步驟:

1、導入jar包(druid-1.1.9.jar)

2、配置信息

採用硬編碼方式

     //創建數據源
     DruidDataSource ds = new DruidDataSource();
     ds.setDriverClassName("com.mysql.jdbc.Driver");
     ds.setUrl("jdbc:mysql:///mydb");
     ds.setUsername("root");
     ds.setPassword("123456");

採用配置文件方式

	Properties properties = new Properties();
    properties.load(new FileReader("src/druid.properties"));
	//通過一個工廠類,創建一個數據源
	DataSource ds =new DruidDataSourceFactory().createDataSource(properties);
配置文件
#基本配置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/mydb
username=root
password=123456
#可選配置
filters=stat
initialSize=2
maxActive=300
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200

3、獲取連接對象

Connection conn = ds.getConnection();

DBUtils 工具類庫

​ Commons DbUtils 是Apache組織提供的一個對JDBC進行簡單封裝的開源工具類庫,
使用它能夠簡化JDBC應用程序的開發,同時也不會影響程序的性能。

//導入jar包(commons-dbutils-1.4.jar)
//創建 QueryRunner 對象
    Properties properties = new Properties();
    properties.load(new FileReader("src/druid.properties"));
    DataSource dataSource = new DruidDataSourceFactory().createDataSource(properties);
    //注意傳入數據源
    QueryRunner queryRunner = new QueryRunner(dataSource);
	//編寫執行SQL語句
	//編寫執行DML、DQL語句  返回值:影響的行數 參2、參3爲問號的值
    int i = queryRunner.update("insert into users values(?,?)", "張三", "123456");
	//查詢語句
	//BeanListHandler 把從數據庫查出來的多條數據,封裝到對象裏面,再把對象放到集合裏面
	List<User> list = queryRunner.query("select * from users", new BeanListHandler<User>(User.class));
	//BeanHandler 查詢一條結果,把這個結果封裝進對象裏面
    User user = queryRunner.query("select * from users", new BeanHandler<User>(User.class));
	// MapHandler 把查詢的結果封裝到Map集合裏面
	Map<String, Object> map = queryRunner.query("select * from users", new MapHandler());
發佈了55 篇原創文章 · 獲贊 31 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章