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

PS:
在上面的forName中,執行了注冊驅動,注冊驅動這個代碼被定義在驅動類的靜態代碼塊中。 對于一些新手,使用的方法可能是



JDBC執行SQL語句的方式主要有三種:
1.使用Statement執行sql語句
2.使用PreparedStatement執行sql語句
3.使用CallableStatement執行sql語句
上面的Statement、PerPareStatement、Callalestatement都可以使用連接對象來獲取。
定義的存儲過程示例:
使用:
不了解事務是什么的,可以看一下我的另外一篇博文:mysql之事務管理
設置事務管理:連接對象.setAutoCommit(boolean)【當參數為true時,代表允許自動提交(事務管理是關閉的,每一條命令都會自動提交);當為false時,代表不允許自動提交,命令會在執行commit之后再統一提交(開啟事務管理的)】
提交事務:連接對象.commit()
回滾事務:連接對象.rollback()
例子:以銀行轉賬為例,張三轉給李四100元,執行事務后,如果運行出錯將不會提交數據到數據庫:
連接池可以自定義,當然常用的一般都是選擇采用第三方開源的連接池,想了解如何自定義連接池的可以自查,下面給出的是兩個常用的連接池的用法。
DBCP:首先,使用DBCP連接池需要導入包:commons-dbcp.jar和commons-pool.jar【如果需要日志功能,還需要commons-logging-1.2.jar ,這里不講述】
DBCP根據配置方式,下面給出兩種使用方法:
1.手動配置法:
創建BasicDataSource對象: BasicDataSource dataSource = new BasicDataSource(); 配置BasicDataSource對象:(少用)調用對應函數配置,例如dataSource.setDriverClassName('com.mysql.jdbc.Driver'); 得到連接對象:Connection conn = ds.getConnection(); 操作數據庫。(得到數據庫連接對象后,就可以像以前一樣去操作數據庫了)2.配置文件配置法:
創建BasicDataSourceFactory對象:BasicDataSourceFactory factory = new BasicDataSourceFactory(); 利用BasicDataSourceFactory對象的createDataSource函數讀取配置文件配置DataSource對象:DataSource dataSource = factory.createDataSource(properties);【配置文件能用哪些參數可以參考這個文檔:http://commons.apache.org/proper/commons-dbcp/configuration.html】 得到連接對象:Connection conn = ds.getConnection(); 操作數據庫。(得到數據庫連接對象后,就可以像以前一樣去操作數據庫了)當使用完畢后,像往常一樣調用close關閉連接即可【這里通過連接池獲取的Connection對象已經封裝過了,使用close函數相當于放回連接池中】
常用的dbcp.properties的配置信息:#連接設置driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/jdbcusername=rootpassword=
#<!-- 初始化連接 -->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 指定由連接池所創建的連接的事務級別(TransactionIsolation)。#可用值為下列之一:(詳情可見javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLEdefaultTransactionIsolation=READ_UNCOMMITTED
C3P0:首先,使用C3P0連接池需要導入包:c3p0-0.9.1.2.jar【還有擴展包如c3p0-oracle-thin-extras-0.9.1.2.jar,這里不講】
手動配置法:
創建ComboPooledDataSource對象:ComboPooledDataSource dataSource = new ComboPooledDataSource(); 調用對應函數配置對應屬性配置文件配置法:
創建配置文件,c3p0的配置文件名字是固定的,必須是c3p0.properties或c3p0-config.xml,否則識別不了。配置文件的寫法看下面【配置文件存儲的位置:1.能在classpath中獲取到的目錄(比如工程的src目錄)、2.WEB-INF/classes、3.某些類似功能的路徑】 創建ComboPooledDataSource對象【如果有配置文件,那么會讀取配置文件來配置ComboPooledDataSource對象】 獲取連接 執行sql語句當你使用完后,Connection對象調用close函數,就會把連接釋放會連接池中【這里通過連接池獲取的Connection對象已經封裝過了,使用close函數相當于放回連接池中】
配置文件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> <!-- 下面的是額外的配置,如最大連接數,連接池大小。。 <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> <!-- 上面是默認的,如果不給參數,默認是上面的; --> <!-- 下面的是單獨的,在創建對象時把下面name中的那個值賦給對象的構造函數,那么將使用下面的配置 --> <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
想更詳細的了解c3p0,可以參考官方文檔:https://www.mchange.com/projects/c3p0/index.html
怎樣去配置c3p0連接池,什么英語代表什么意思,具體請參考:https://www.mchange.com/projects/c3p0/index.html
補充: 事實上DBCP和c3p0還有不少使用方法,上面只講解了常用的。DbUtils DbUtils是apache旗下的一個操作數據庫的工具 DbUtils可以簡化我們對數據庫的CRUD操作,一個常用功能是能把查詢到的數據自動封裝起來,而不再需要我們操作ResultSet。要想使用DBUtils,首先要導入包:commons-dbutils-1.4.jar
增、刪、改: DbUtils的寫操作是一類,讀操作是一類 寫操作主要是調用update函數1.新建QueryRunner對象【如果傳入一個連接池對象,那么后續操作的數據庫連接就是這個連接池的連接;如果不設置,那么執行update時要給一個連接對象】
2.調用update函數.
update()有多個重構函數,可以依據情況來選擇使用:
補充:對于封裝成對象的,需要提供一個bean類.class參數,這是為了能創建對象
關閉流、釋放資源:DbUtils中提供了可以關閉各種資源的靜態方法
更多關于java相關內容感興趣的讀者可查看本站專題:《Java使用JDBC操作數據庫技巧總結》、《Java+MySQL數據庫程序設計總結》、《Java數據結構與算法教程》、《Java文件與目錄操作技巧匯總》、《Java操作DOM節點技巧總結》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
相關文章:
1. python求numpy中array按列非零元素的平均值案例2. CSS代碼檢查工具stylelint的使用方法詳解3. Python 多線程之threading 模塊的使用4. 淺談python多線程和多線程變量共享問題介紹5. vue3?Error:Unknown?variable?dynamic?import:?../views/的解決方案6. Python的Tqdm模塊實現進度條配置7. react axios 跨域訪問一個或多個域名問題8. WML語言的基本情況9. python利用platform模塊獲取系統信息10. python 實現rolling和apply函數的向下取值操作
