您好,登錄后才能下訂單哦!
這篇文章主要講解了如何使用Java中的JDBC,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
什么是JDBC:
PS:
JDBC執行SQL語句的方式主要有三種:
1.使用Statement
執行sql語句
2.使用PreparedStatement執行sql語句
3.使用CallableStatement
執行sql語句
上面的Statement、PerPareStatement、Callalestatement都可以使用連接對象來獲取。
Statement
執行語句Statement
對象的獲取可以使用createStatement()
來獲取Statement
對象后,對于查詢類的sql語句使用:executeQuery(sql)
,sql是一個字符串sql語句,返回結果是一個結果集【如果獲取結果看下面的結果部分】executeUpdate(sql)
,sql是一個字符串sql語句,返回結果是一個整數(受影響的行數)PreparedStatement
對象的獲取可以使用prepareStatement(sql)
來獲取,注意的是需要傳入一條sql語句Statement
,但不同的是PreparedStatement
可以使用占位符,它是由占位符標識需要輸入數據的位置,然后再逐一填入數據。當然,PreparedStatement
也可以執行沒有占位符的sql語句setString
或setInt
等方法來設置每一位的數據。【有各種對應數據類型的設置方法,比如還有setFloat
】setXXX
方法中,第一個參數是位置,第二個是數據Statement
對象后,對于查詢類的sql語句使用:executeQuery()
,返回結果是一個結果集【如果獲取結果看下面的結果部分】executeUpdate()
,返回結果是一個整數(受影響的行數)PreparedStatement
的效率要高于Statement
【有興趣的自查】CallableStatement
執行語句CallableStatement
主要用來調用存儲過程CallableStatement
對象自身的getXXX
方法來獲取定義的存儲過程示例:
使用:
不了解事務是什么的,可以看一下我的另外一篇博文:mysql之事務管理
連接對象.setAutoCommit(boolean)【當參數為true時,代表允許自動提交(事務管理是關閉的,每一條命令都會自動提交);當為false時,代表不允許自動提交,命令會在執行commit之后再統一提交(開啟事務管理的)】
連接對象.commit()
連接對象.rollback()
以銀行轉賬為例,張三轉給李四100元,執行事務后,如果運行出錯將不會提交數據到數據庫:
連接池可以自定義,當然常用的一般都是選擇采用第三方開源的連接池,想了解如何自定義連接池的可以自查,下面給出的是兩個常用的連接池的用法。
首先,使用DBCP連接池需要導入包:commons-dbcp.jar和commons-pool.jar【如果需要日志功能,還需要commons-logging-1.2.jar ,這里不講述】
DBCP根據配置方式,下面給出兩種使用方法:
1.手動配置法:
2.配置文件配置法:
當使用完畢后,像往常一樣調用close關閉連接即可【這里通過連接池獲取的Connection對象已經封裝過了,使用close函數相當于放回連接池中】
常用的dbcp.properties的配置信息:
#連接設置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password=#<!-- 初始化連接 -->
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, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED
首先,使用C3P0連接池需要導入包:c3p0-0.9.1.2.jar【還有擴展包如c3p0-oracle-thin-extras-0.9.1.2.jar,這里不講】
手動配置法:
配置文件配置法:
當你使用完后,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.Driver c3p0.jdbcUrl=jdbc:mysql://localhost/bank c3p0.user=root c3p0.password=123456
想更詳細的了解c3p0,可以參考官方文檔:https://www.mchange.com/projects/c3p0/index.html
怎樣去配置c3p0連接池,什么英語代表什么意思,具體請參考:https://www.mchange.com/projects/c3p0/index.html
要想使用DBUtils,首先要導入包:commons-dbutils-1.4.jar
1.新建QueryRunner對象【如果傳入一個連接池對象,那么后續操作的數據庫連接就是這個連接池的連接;如果不設置,那么執行update時要給一個連接對象】
2.調用update函數.
update()有多個重構函數,可以依據情況來選擇使用:
常見ResultSetHandler實現類:
- BeanHandler :把數據庫中的一行數據根據變量名自動封裝到對象中;如果查詢語句返回多條結果,將ResultSet中第一行的數據根據變量名自動封裝到對象中
- BeanListHandler:把數據庫中的多行數據根據變量名自動封裝到對象中,并存儲到List中返回。所以返回結果是一個含有多個bean對象的list
- ScalarHandler :將ResultSet中一條記錄的某一列的數據存成Object,返回值是一個Object。不給參數時默認是第一列的值,參數可以給列數,也可以給字段名 【可以用于統計函數等返回一個值的情況】
- ArrayHandler :把一條記錄的所有數據存儲到一個數組中,第一列的數據在數組的第一個位置。
- ArrayListHandler:與ArrayHandler功能類似,但可以返回包含多個數組的list了。
補充:對于封裝成對象的,需要提供一個bean類.class參數,這是為了能創建對象
DbUtils中提供了可以關閉各種資源的靜態方法
看完上述內容,是不是對如何使用Java中的JDBC有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。