Java JDBC基本使用方法詳解
本文實(shí)例講述了Java JDBC基本使用方法。分享給大家供大家參考,具體如下:
本文內(nèi)容: 什么是JDBC JDBC的使用 事務(wù) 連接池 DbUtils首發(fā)日期:2018-05-27
修改:
2018-07-19:增加了事務(wù)、連接池、DBUtils 2018-07-27:對(duì)特別情況下的事務(wù)進(jìn)行了描述。對(duì)DBUtils增加了關(guān)閉資源、關(guān)閉流。連接池發(fā)現(xiàn)漏了釋放連接。什么是JDBC: JDBC全稱Java Database Connectivity JDBC可以通過載入不同的數(shù)據(jù)庫的“驅(qū)動(dòng)程序”而與不同的數(shù)據(jù)庫進(jìn)行連接。JDBC的優(yōu)點(diǎn): 使用的驅(qū)動(dòng)不同,即可連接不同的數(shù)據(jù)庫。 使用同一套操作來操作不同的數(shù)據(jù)庫 如果每一個(gè)數(shù)據(jù)庫java都制訂一套連接方式,那么當(dāng)不同的數(shù)據(jù)庫更新的時(shí)候,java也需要更新自己的代碼,而使用jdbc,使用同一套代碼來操作,使用不同的驅(qū)動(dòng)程序(驅(qū)動(dòng)程序由數(shù)據(jù)庫廠商提供)來連接,這使得可以連接不同的數(shù)據(jù)庫。JDBC的使用:導(dǎo)入對(duì)應(yīng)數(shù)據(jù)庫的驅(qū)動(dòng)類: 1.在對(duì)應(yīng)的數(shù)據(jù)庫廠商網(wǎng)站獲取對(duì)應(yīng)的jar包 2.將對(duì)應(yīng)的jar包添加到引用。 在eclipse中可以將jar包導(dǎo)入一個(gè)文件夾后,右鍵Build Path -> add to path就可以將jar包添加到當(dāng)前項(xiàng)目引用的庫里面。

PS:
在上面的forName中,執(zhí)行了注冊驅(qū)動(dòng),注冊驅(qū)動(dòng)這個(gè)代碼被定義在驅(qū)動(dòng)類的靜態(tài)代碼塊中。 對(duì)于一些新手,使用的方法可能是



JDBC執(zhí)行SQL語句的方式主要有三種:
1.使用Statement執(zhí)行sql語句
2.使用PreparedStatement執(zhí)行sql語句
3.使用CallableStatement執(zhí)行sql語句
上面的Statement、PerPareStatement、Callalestatement都可以使用連接對(duì)象來獲取。
定義的存儲(chǔ)過程示例:
使用:
不了解事務(wù)是什么的,可以看一下我的另外一篇博文:mysql之事務(wù)管理
設(shè)置事務(wù)管理:連接對(duì)象.setAutoCommit(boolean)【當(dāng)參數(shù)為true時(shí),代表允許自動(dòng)提交(事務(wù)管理是關(guān)閉的,每一條命令都會(huì)自動(dòng)提交);當(dāng)為false時(shí),代表不允許自動(dòng)提交,命令會(huì)在執(zhí)行commit之后再統(tǒng)一提交(開啟事務(wù)管理的)】
提交事務(wù):連接對(duì)象.commit()
回滾事務(wù):連接對(duì)象.rollback()
例子:以銀行轉(zhuǎn)賬為例,張三轉(zhuǎn)給李四100元,執(zhí)行事務(wù)后,如果運(yùn)行出錯(cuò)將不會(huì)提交數(shù)據(jù)到數(shù)據(jù)庫:
連接池可以自定義,當(dāng)然常用的一般都是選擇采用第三方開源的連接池,想了解如何自定義連接池的可以自查,下面給出的是兩個(gè)常用的連接池的用法。
DBCP:首先,使用DBCP連接池需要導(dǎo)入包:commons-dbcp.jar和commons-pool.jar【如果需要日志功能,還需要commons-logging-1.2.jar ,這里不講述】
DBCP根據(jù)配置方式,下面給出兩種使用方法:
1.手動(dòng)配置法:
創(chuàng)建BasicDataSource對(duì)象: BasicDataSource dataSource = new BasicDataSource(); 配置BasicDataSource對(duì)象:(少用)調(diào)用對(duì)應(yīng)函數(shù)配置,例如dataSource.setDriverClassName('com.mysql.jdbc.Driver'); 得到連接對(duì)象:Connection conn = ds.getConnection(); 操作數(shù)據(jù)庫。(得到數(shù)據(jù)庫連接對(duì)象后,就可以像以前一樣去操作數(shù)據(jù)庫了)2.配置文件配置法:
創(chuàng)建BasicDataSourceFactory對(duì)象:BasicDataSourceFactory factory = new BasicDataSourceFactory(); 利用BasicDataSourceFactory對(duì)象的createDataSource函數(shù)讀取配置文件配置DataSource對(duì)象:DataSource dataSource = factory.createDataSource(properties);【配置文件能用哪些參數(shù)可以參考這個(gè)文檔:http://commons.apache.org/proper/commons-dbcp/configuration.html】 得到連接對(duì)象:Connection conn = ds.getConnection(); 操作數(shù)據(jù)庫。(得到數(shù)據(jù)庫連接對(duì)象后,就可以像以前一樣去操作數(shù)據(jù)庫了)當(dāng)使用完畢后,像往常一樣調(diào)用close關(guān)閉連接即可【這里通過連接池獲取的Connection對(duì)象已經(jīng)封裝過了,使用close函數(shù)相當(dāng)于放回連接池中】
常用的dbcp.properties的配置信息:#連接設(shè)置driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/jdbcusername=rootpassword=
#<!-- 初始化連接 -->initialSize=10
#最大連接數(shù)量maxActive=50
#<!-- 最大空閑連接 -->maxIdle=20
#<!-- 最小空閑連接 -->minIdle=5
#<!-- 超時(shí)等待時(shí)間以毫秒為單位 6000毫秒/1000等于60秒 -->maxWait=60000
#JDBC驅(qū)動(dòng)建立連接時(shí)附帶的連接屬性屬性的格式必須為這樣:[屬性名=property;] #注意:'user' 與 'password' 兩個(gè)屬性會(huì)被明確地傳遞,因此這里不需要包含他們。connectionProperties=useUnicode=true;characterEncoding=gbk
#指定由連接池所創(chuàng)建的連接的自動(dòng)提交(auto-commit)狀態(tài)。defaultAutoCommit=true
#driver default 指定由連接池所創(chuàng)建的連接的事務(wù)級(jí)別(TransactionIsolation)。#可用值為下列之一:(詳情可見javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLEdefaultTransactionIsolation=READ_UNCOMMITTED
C3P0:首先,使用C3P0連接池需要導(dǎo)入包:c3p0-0.9.1.2.jar【還有擴(kuò)展包如c3p0-oracle-thin-extras-0.9.1.2.jar,這里不講】
手動(dòng)配置法:
創(chuàng)建ComboPooledDataSource對(duì)象:ComboPooledDataSource dataSource = new ComboPooledDataSource(); 調(diào)用對(duì)應(yīng)函數(shù)配置對(duì)應(yīng)屬性配置文件配置法:
創(chuàng)建配置文件,c3p0的配置文件名字是固定的,必須是c3p0.properties或c3p0-config.xml,否則識(shí)別不了。配置文件的寫法看下面【配置文件存儲(chǔ)的位置:1.能在classpath中獲取到的目錄(比如工程的src目錄)、2.WEB-INF/classes、3.某些類似功能的路徑】 創(chuàng)建ComboPooledDataSource對(duì)象【如果有配置文件,那么會(huì)讀取配置文件來配置ComboPooledDataSource對(duì)象】 獲取連接 執(zhí)行sql語句當(dāng)你使用完后,Connection對(duì)象調(diào)用close函數(shù),就會(huì)把連接釋放會(huì)連接池中【這里通過連接池獲取的Connection對(duì)象已經(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)建對(duì)象時(shí)把下面name中的那個(gè)值賦給對(duì)象的構(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.Driverc3p0.jdbcUrl=jdbc:mysql://localhost/bankc3p0.user=rootc3p0.password=123456
想更詳細(xì)的了解c3p0,可以參考官方文檔:https://www.mchange.com/projects/c3p0/index.html
怎樣去配置c3p0連接池,什么英語代表什么意思,具體請參考:https://www.mchange.com/projects/c3p0/index.html
補(bǔ)充: 事實(shí)上DBCP和c3p0還有不少使用方法,上面只講解了常用的。DbUtils DbUtils是apache旗下的一個(gè)操作數(shù)據(jù)庫的工具 DbUtils可以簡化我們對(duì)數(shù)據(jù)庫的CRUD操作,一個(gè)常用功能是能把查詢到的數(shù)據(jù)自動(dòng)封裝起來,而不再需要我們操作ResultSet。要想使用DBUtils,首先要導(dǎo)入包:commons-dbutils-1.4.jar
增、刪、改: DbUtils的寫操作是一類,讀操作是一類 寫操作主要是調(diào)用update函數(shù)1.新建QueryRunner對(duì)象【如果傳入一個(gè)連接池對(duì)象,那么后續(xù)操作的數(shù)據(jù)庫連接就是這個(gè)連接池的連接;如果不設(shè)置,那么執(zhí)行update時(shí)要給一個(gè)連接對(duì)象】
2.調(diào)用update函數(shù).
update()有多個(gè)重構(gòu)函數(shù),可以依據(jù)情況來選擇使用:
補(bǔ)充:對(duì)于封裝成對(duì)象的,需要提供一個(gè)bean類.class參數(shù),這是為了能創(chuàng)建對(duì)象
關(guān)閉流、釋放資源:DbUtils中提供了可以關(guān)閉各種資源的靜態(tài)方法
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java使用JDBC操作數(shù)據(jù)庫技巧總結(jié)》、《Java+MySQL數(shù)據(jù)庫程序設(shè)計(jì)總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java文件與目錄操作技巧匯總》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章:
1. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向2. Python importlib動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼3. android studio 打包自動(dòng)生成版本號(hào)與日期,apk輸入路徑詳解4. 利用promise及參數(shù)解構(gòu)封裝ajax請求的方法5. 淺談python出錯(cuò)時(shí)traceback的解讀6. 在Android中使用WebSocket實(shí)現(xiàn)消息通信的方法詳解7. .NET中l(wèi)ambda表達(dá)式合并問題及解決方法8. Nginx+php配置文件及原理解析9. python matplotlib:plt.scatter() 大小和顏色參數(shù)詳解10. JSP數(shù)據(jù)交互實(shí)現(xiàn)過程解析
