您好,登錄后才能下訂單哦!
這篇文章主要講解了如何使用Java中的JDBC,內(nèi)容清晰明了,對此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會有幫助。
什么是JDBC:
PS:
JDBC執(zhí)行SQL語句的方式主要有三種:
1.使用Statement
執(zhí)行sql語句
2.使用PreparedStatement執(zhí)行sql語句
3.使用CallableStatement
執(zhí)行sql語句
上面的Statement、PerPareStatement、Callalestatement都可以使用連接對象來獲取。
Statement
執(zhí)行語句Statement
對象的獲取可以使用createStatement()
來獲取Statement
對象后,對于查詢類的sql語句使用:executeQuery(sql)
,sql是一個(gè)字符串sql語句,返回結(jié)果是一個(gè)結(jié)果集【如果獲取結(jié)果看下面的結(jié)果部分】executeUpdate(sql)
,sql是一個(gè)字符串sql語句,返回結(jié)果是一個(gè)整數(shù)(受影響的行數(shù))PreparedStatement
對象的獲取可以使用prepareStatement(sql)
來獲取,注意的是需要傳入一條sql語句Statement
,但不同的是PreparedStatement
可以使用占位符,它是由占位符標(biāo)識需要輸入數(shù)據(jù)的位置,然后再逐一填入數(shù)據(jù)。當(dāng)然,PreparedStatement
也可以執(zhí)行沒有占位符的sql語句setString
或setInt
等方法來設(shè)置每一位的數(shù)據(jù)?!居懈鞣N對應(yīng)數(shù)據(jù)類型的設(shè)置方法,比如還有setFloat
】setXXX
方法中,第一個(gè)參數(shù)是位置,第二個(gè)是數(shù)據(jù)Statement
對象后,對于查詢類的sql語句使用:executeQuery()
,返回結(jié)果是一個(gè)結(jié)果集【如果獲取結(jié)果看下面的結(jié)果部分】executeUpdate()
,返回結(jié)果是一個(gè)整數(shù)(受影響的行數(shù))PreparedStatement
的效率要高于Statement
【有興趣的自查】CallableStatement
執(zhí)行語句CallableStatement
主要用來調(diào)用存儲過程CallableStatement
對象自身的getXXX
方法來獲取定義的存儲過程示例:
使用:
不了解事務(wù)是什么的,可以看一下我的另外一篇博文:mysql之事務(wù)管理
連接對象.setAutoCommit(boolean)【當(dāng)參數(shù)為true時(shí),代表允許自動提交(事務(wù)管理是關(guān)閉的,每一條命令都會自動提交);當(dāng)為false時(shí),代表不允許自動提交,命令會在執(zhí)行commit之后再統(tǒng)一提交(開啟事務(wù)管理的)】
連接對象.commit()
連接對象.rollback()
以銀行轉(zhuǎn)賬為例,張三轉(zhuǎn)給李四100元,執(zhí)行事務(wù)后,如果運(yùn)行出錯(cuò)將不會提交數(shù)據(jù)到數(shù)據(jù)庫:
連接池可以自定義,當(dāng)然常用的一般都是選擇采用第三方開源的連接池,想了解如何自定義連接池的可以自查,下面給出的是兩個(gè)常用的連接池的用法。
首先,使用DBCP連接池需要導(dǎo)入包:commons-dbcp.jar和commons-pool.jar【如果需要日志功能,還需要commons-logging-1.2.jar ,這里不講述】
DBCP根據(jù)配置方式,下面給出兩種使用方法:
1.手動配置法:
2.配置文件配置法:
當(dāng)使用完畢后,像往常一樣調(diào)用close關(guān)閉連接即可【這里通過連接池獲取的Connection對象已經(jīng)封裝過了,使用close函數(shù)相當(dāng)于放回連接池中】
常用的dbcp.properties的配置信息:
#連接設(shè)置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password=#<!-- 初始化連接 -->
initialSize=10#最大連接數(shù)量
maxActive=50#<!-- 最大空閑連接 -->
maxIdle=20#<!-- 最小空閑連接 -->
minIdle=5#<!-- 超時(shí)等待時(shí)間以毫秒為單位 6000毫秒/1000等于60秒 -->
maxWait=60000
#JDBC驅(qū)動建立連接時(shí)附帶的連接屬性屬性的格式必須為這樣:[屬性名=property;]
#注意:"user" 與 "password" 兩個(gè)屬性會被明確地傳遞,因此這里不需要包含他們。
connectionProperties=useUnicode=true;characterEncoding=gbk#指定由連接池所創(chuàng)建的連接的自動提交(auto-commit)狀態(tài)。
defaultAutoCommit=true#driver default 指定由連接池所創(chuàng)建的連接的事務(wù)級別(TransactionIsolation)。
#可用值為下列之一:(詳情可見javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED
首先,使用C3P0連接池需要導(dǎo)入包:c3p0-0.9.1.2.jar【還有擴(kuò)展包如c3p0-oracle-thin-extras-0.9.1.2.jar,這里不講】
手動配置法:
配置文件配置法:
當(dāng)你使用完后,Connection對象調(diào)用close函數(shù),就會把連接釋放會連接池中【這里通過連接池獲取的Connection對象已經(jīng)封裝過了,使用close函數(shù)相當(dāng)于放回連接池中】
配置文件c3p0-config.xml的寫法:
<c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost/bank</property> <property name="user">root</property> <property name="password">123456</property> <!-- 下面的是額外的配置,如最大連接數(shù),連接池大小。。 <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> <!-- 上面是默認(rèn)的,如果不給參數(shù),默認(rèn)是上面的; --> <!-- 下面的是單獨(dú)的,在創(chuàng)建對象時(shí)把下面name中的那個(gè)值賦給對象的構(gòu)造函數(shù),那么將使用下面的配置 --> <named-config name="student"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost/student</property> <property name="user">root</property> <property name="password">123456</property> </named-config> </c3p0-config>
配置文件c3p0.properties的寫法:
c3p0.driverClass=com.mysql.jdbc.Driver c3p0.jdbcUrl=jdbc:mysql://localhost/bank c3p0.user=root c3p0.password=123456
想更詳細(xì)的了解c3p0,可以參考官方文檔:https://www.mchange.com/projects/c3p0/index.html
怎樣去配置c3p0連接池,什么英語代表什么意思,具體請參考:https://www.mchange.com/projects/c3p0/index.html
要想使用DBUtils,首先要導(dǎo)入包:commons-dbutils-1.4.jar
1.新建QueryRunner對象【如果傳入一個(gè)連接池對象,那么后續(xù)操作的數(shù)據(jù)庫連接就是這個(gè)連接池的連接;如果不設(shè)置,那么執(zhí)行update時(shí)要給一個(gè)連接對象】
2.調(diào)用update函數(shù).
update()有多個(gè)重構(gòu)函數(shù),可以依據(jù)情況來選擇使用:
常見ResultSetHandler實(shí)現(xiàn)類:
- BeanHandler :把數(shù)據(jù)庫中的一行數(shù)據(jù)根據(jù)變量名自動封裝到對象中;如果查詢語句返回多條結(jié)果,將ResultSet中第一行的數(shù)據(jù)根據(jù)變量名自動封裝到對象中
- BeanListHandler:把數(shù)據(jù)庫中的多行數(shù)據(jù)根據(jù)變量名自動封裝到對象中,并存儲到List中返回。所以返回結(jié)果是一個(gè)含有多個(gè)bean對象的list
- ScalarHandler :將ResultSet中一條記錄的某一列的數(shù)據(jù)存成Object,返回值是一個(gè)Object。不給參數(shù)時(shí)默認(rèn)是第一列的值,參數(shù)可以給列數(shù),也可以給字段名 【可以用于統(tǒng)計(jì)函數(shù)等返回一個(gè)值的情況】
- ArrayHandler :把一條記錄的所有數(shù)據(jù)存儲到一個(gè)數(shù)組中,第一列的數(shù)據(jù)在數(shù)組的第一個(gè)位置。
- ArrayListHandler:與ArrayHandler功能類似,但可以返回包含多個(gè)數(shù)組的list了。
補(bǔ)充:對于封裝成對象的,需要提供一個(gè)bean類.class參數(shù),這是為了能創(chuàng)建對象
DbUtils中提供了可以關(guān)閉各種資源的靜態(tài)方法
看完上述內(nèi)容,是不是對如何使用Java中的JDBC有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。