1.5.2 PreparedStatement的功能
????????為占位符設(shè)置值
????????????setXxx(參數(shù)1落恼,參數(shù)2)
????????????????參數(shù)1:問號的位置,從1開始
????????????????參數(shù)2:問號位置上的值
????執(zhí)行SQL
????????????executeUpdate():執(zhí)行增刪改查,返回 int 值,表示影響的記錄數(shù)
????????????executeQuery():執(zhí)行查詢,返回結(jié)果集 ResultSet
1.6 數(shù)據(jù)庫連接池
????????1.6.1 概念
????????????????????概念:本質(zhì)上就是一個容器喻圃,存放數(shù)據(jù)庫連接對象的容器
????????1.6.2 好處
????????????????節(jié)省資源
????????????????提高用戶的訪問效率
????????1.6.3 實(shí)現(xiàn)方式
? ? ? ? ? ? ? 在 javax.sql 下提供了一個數(shù)據(jù)庫連接池的接口,DataSource
????????????????????DataSource的方法:
????????????????????????1.? getConnection():從連接池中獲取連接對象
????????????????????????????close():將連接對象歸還到連接池中
????????1.6.3.1 C3P0
????????????????步驟:
????????????????????????導(dǎo)入 jar 包粪滤,c3p0-0.9.5.2.jar 和 mchange-commons-java-0.2.12.jar
????????????????????????編寫配置文件:
????????????????????????????在項(xiàng)目的 src 目錄下定義 c3p0.properties 或者 c3p0-config.xml
????????????????????????????在文件中定義數(shù)據(jù)庫的驅(qū)動包斧拍、數(shù)據(jù)庫的地址、用戶名杖小、密碼等
????????????????????????????創(chuàng)建C3P0的核心類對象肆汹,ComboPooledDataSource
// 第一種方式會在c3p0的配置文件中,根據(jù)named-config標(biāo)簽下的內(nèi)容對數(shù)據(jù)庫連接池進(jìn)行配置
????????????????????ComboPooledDataSourcedataSource=newComboPooledDataSource("myc3p0");
// 第二種方式會在c3p0的配置文件中予权,根據(jù)default-config標(biāo)簽下的內(nèi)容對數(shù)據(jù)庫連接池進(jìn)行配置
????????????????????ComboPooledDataSourcedataSource=newComboPooledDataSource();
????????????調(diào)用獲取連接對象的方法昂勉,getConnection()
????????????歸還連接對象,close()
c3p0-config.xml
<c3p0-config>
? ? <named-configname="myc3p0">
? ? ? ? <!-- driverClass:驅(qū)動包? -->
? ? ? ? <propertyname="driverClass">com.mysql.jdbc.Driver</property>
? ? ? ? <!-- jdbcUrl:數(shù)據(jù)庫地址 -->
? ? ? ? <propertyname="jdbcUrl">jdbc:mysql://localhost:3306/0521am</property>
? ? ? ? <!-- user:管理員的用戶名 -->
? ? ? ? <propertyname="user">root</property>
? ? ? ? <!-- password:管理員的密碼 -->
? ? ? ? <propertyname="password">1234</property>
? ? ? ? <!-- initialPoolSize:連接池的默認(rèn)大小 -->
? ? ? ? <propertyname="initialPoolSize">3</property>
? ? ? ? <!-- maxPoolSize:最大連接數(shù) -->
? ? ? ? <propertyname="maxPoolSize">5</property>
? ? ? ? <!-- checkoutTimeout:超時時間 -->
? ? ? ? <propertyname="checkoutTimeout">1000</property>
?</named-config>
? ? <default-config>
? ? ? ? <!-- driverClass:驅(qū)動包? -->
? ? ? ? <propertyname="driverClass">com.mysql.jdbc.Driver</property>
? ? ? ? <!-- jdbcUrl:數(shù)據(jù)庫地址 -->
? ? ? ? <propertyname="jdbcUrl">jdbc:mysql://localhost:3306/0521am</property>
? ? ? ? <!-- user:管理員的用戶名 -->
? ? ? ? <propertyname="user">root</property>
? ? ? ? <!-- password:管理員的密碼 -->
? ? ? ? <propertyname="password">1234</property>
? ? ? ? <!-- initialPoolSize:連接池的默認(rèn)大小 -->
? ? ? ? <propertyname="initialPoolSize">3</property>
? ? ? ? <!-- maxPoolSize:最大連接數(shù) -->
? ? ? ? <propertyname="maxPoolSize">5</property>
? ? ? ? <!-- checkoutTimeout:超時時間 -->
? ? ? ? <propertyname="checkoutTimeout">1000</property>
? ? </default-config>
</c3p0-config>
注:
1.? 從連接池中存在的連接對象的第一個開始獲取
? ??將歸還的連接對象添加到連接池的末尾
? ??當(dāng)獲取連接數(shù)超過了配置的最大連接數(shù)時會發(fā)生異常
? ??當(dāng)連接對象使用完畢后扫腺,應(yīng)立即歸還岗照,以便重新獲取加以利用
1.6.3.2 Druid
????????由阿里巴巴提供
????????步驟:
????????????導(dǎo)入 jar 包,druid-1.0.9.jar
????????????定義配置文件:
????????????編寫 properties 文件
????????????????文件名是任意的笆环,可以放在任意的目錄下
????????????加載配置文件
????????????????????從數(shù)據(jù)庫連接池工廠中獲取連接池對象
????????????????????數(shù)據(jù)庫連接池工廠攒至,DruidDataSourceFactory
????????????????????獲取連接池對象,createDataSource(Properties 對象)
????????????獲取連接對象咧织,getConntion()
druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///0521am
username=root
password=1234
initialSize=3
maxActive=5
maxWait=3000