大家好,我是IT修真院鄭州分院第11期的JAVA學(xué)員何爽,一枚正直純潔善良的java程序員。
今天給大家分享一下,修真院官網(wǎng)Java任務(wù)1,深度思考中的知識(shí)點(diǎn)————Jdbc和Jdbctemplate。
1.背景介紹
Java程序員最基本的也是最重要的技能之一就是去和數(shù)據(jù)庫(kù)打交道,但代碼和數(shù)據(jù)庫(kù)是互不相干的,那么我們?cè)鯓尤プ屛覀儗懙拇a去操作數(shù)據(jù)庫(kù)呢?這個(gè)時(shí)候我們就需要去用到jdbc去連接數(shù)據(jù)庫(kù)和我們的代碼。
2.知識(shí)剖析
(一)什么是jdbc,jdbctemplate
JDBC(Java Data Base
Connectivity,java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL語(yǔ)句的Java API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn),它由一組用Java語(yǔ)言編寫的類和接口組成。JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠編寫數(shù)據(jù)庫(kù)應(yīng)用程序。
JDBCTemplate就是Spring對(duì)JDBC的封裝,通俗點(diǎn)說(shuō)就是Spring對(duì)jdbc的封裝的模板,那么JDBCTemplate怎么做到的,這就和spring有關(guān)系了。
SpringIOC容器將管理數(shù)據(jù)庫(kù)連接的數(shù)據(jù)源當(dāng)作普通Java
Bean一樣管理,然后將數(shù)據(jù)源注入封裝類JdbcTemplate中,JdbcTemplate的dataSource屬性就是注入配置的數(shù)據(jù)源。
JDBCTemplate是涉及到spring框架的一種方法,JDBCTemplate就是通過(guò).xml配置文件極大的簡(jiǎn)化了我們代碼量,并且提高了安全性,通過(guò)配置文件實(shí)現(xiàn)代碼簡(jiǎn)化。
(二)jdbc操作數(shù)據(jù)庫(kù)的使用
(1)初始化驅(qū)動(dòng):
通過(guò)Driver接口,裝載MySql驅(qū)動(dòng):??????????????????
Class.forName("com.mysql.jdbc.Driver")
(2)創(chuàng)建數(shù)據(jù)庫(kù)連接:
connection = DriverManager.getConnection(url,name,密碼);
(3)創(chuàng)建sql語(yǔ)句???????????
(4)獲得向數(shù)據(jù)庫(kù)發(fā)送sql語(yǔ)句的parperstasement對(duì)象
preparedStatement =
connection.prepareStatement(sql);
(5)執(zhí)行SQL語(yǔ)句:
preparedStatement.executeUpdate();如果使用的select查詢,則需使用preparedStatement.executeQuery()方法。
(5)對(duì)結(jié)果集做相應(yīng)的處理(增,刪,改,查)
(6)關(guān)閉資源:
Close(resultSet,preparedStatement,connection);
(三)jdbctemplate操作數(shù)據(jù)庫(kù)的使用
1.要使用JDBCTemplate對(duì)象來(lái)完成JDBC操作。通常情況下,有三種種方式得到JDBCTemplate對(duì)象。
(1)我們可以在自己定義的DAO 實(shí)現(xiàn)類中注入一個(gè)DataSource 引用來(lái)完成JdbcTemplate 的實(shí)例化。也就是它是從外部“注入” DataSource 到DAO 中,然后自己實(shí)例化JdbcTemplate,然后將DataSource 設(shè)置到JdbcTemplate 對(duì)象中。
(2)在 Spring 的 IoC 容器中配置一個(gè) JdbcTemplate 的 bean,將 DataSource 注入進(jìn)來(lái),然后再把JdbcTemplate 注入到自定義DAO 中。
(3)Spring 提供了 org.springframework.jdbc.core.support.JdbcDaoSupport 類,這個(gè)類中定義了 JdbcTemplate 屬性,也定義了DataSource屬性,當(dāng)設(shè)置DataSource 屬性的時(shí)候,會(huì)創(chuàng)建jdbcTemplate 的實(shí)例,所以我們自己編寫的DAO 只需要繼承JdbcDaoSupport 類,然后注入DataSource 即可
2. JdbcTemplate類主要提供以下幾類方法:
(1)execute方法:用于執(zhí)行任何SQL語(yǔ)句,一般用于執(zhí)行DDL語(yǔ)句;
(2)update方法及batchUpdate方法:update方法用于執(zhí)行新增、修改、刪除等語(yǔ)句,batchUpdate方法用于執(zhí)行批處理相關(guān)語(yǔ)句;
(3)query方法及queryForXXX方法:用于執(zhí)行查詢相關(guān)語(yǔ)句;
3.常見(jiàn)問(wèn)題
數(shù)據(jù)庫(kù)連接資源被占用
PreparedStatement和Statement有什么區(qū)別?
JDBCTemplate和JDBC的優(yōu)缺點(diǎn)
4.解決方案
(1)如果真的發(fā)生數(shù)據(jù)庫(kù)連接資源被占用,有什么解決方法::
修改 MySQL 安裝目錄下 my.ini 或者 my.cnf 文件內(nèi)的 max_user_connections 參數(shù)的數(shù)值,重啟 MySQL 服務(wù)器。
(2)PreparedStatement和Statement有什么區(qū)別?
Statement每次執(zhí)行SQL語(yǔ)句,相關(guān)數(shù)據(jù)庫(kù)都要進(jìn)行SQL語(yǔ)句編譯,PreparedStatement是預(yù)編譯,對(duì)批量處理大大提高效率,可以防止SQL注入攻擊,防止數(shù)據(jù)庫(kù)緩沖池溢出,代碼的可讀性,可維護(hù)性都更好(運(yùn)行代碼)
(3)JDBCTemplate和JDBC的優(yōu)缺點(diǎn)
JDBC
優(yōu)點(diǎn):運(yùn)行期:快捷、高效
缺點(diǎn):編輯器:代碼量大、繁瑣異常處理、不支持?jǐn)?shù)據(jù)庫(kù)跨平臺(tái)
JDBCTemplate
優(yōu)點(diǎn):運(yùn)行期:高效、內(nèi)嵌Spring框架中、支持基于AOP的聲明式事務(wù)
缺點(diǎn):必須于Spring框架結(jié)合在一起使用、不支持?jǐn)?shù)據(jù)庫(kù)跨平臺(tái)、默認(rèn)沒(méi)有緩存
5.編碼實(shí)戰(zhàn)
6.擴(kuò)展思考
使用連接池的好處
1).當(dāng)有多個(gè)線程,每個(gè)線程都需要連接數(shù)據(jù)庫(kù)執(zhí)行SQL語(yǔ)句的話,那么每個(gè)線程都會(huì)創(chuàng)建一個(gè)連接,并且在使用完畢后,關(guān)閉連接。創(chuàng)建連接和關(guān)閉連接的過(guò)程也是比較消耗時(shí)間的,當(dāng)多線程并發(fā)的時(shí)候,系統(tǒng)就會(huì)變得很卡頓。同時(shí),一個(gè)數(shù)據(jù)庫(kù)同時(shí)支持的連接總數(shù)也是有限的,如果多線程并發(fā)量很大,那么數(shù)據(jù)庫(kù)連接的總數(shù)就會(huì)被消耗光,后續(xù)線程發(fā)起的數(shù)據(jù)庫(kù)連接就會(huì)失敗。
2.).連接池在使用之前,就會(huì)創(chuàng)建好一定數(shù)量的連接。如果有任何線程需要使用連接,那么就從連接池里面借用,而不是自己重新創(chuàng)建. 使用完畢后,又把這個(gè)連接歸還給連接池供下一次或者其他線程使用。倘若發(fā)生多線程并發(fā)情況,連接池里的連接被借用光了,那么其他線程就會(huì)臨時(shí)等待,直到有連接被歸還回來(lái),再繼續(xù)使用。整個(gè)過(guò)程,這些連接都不會(huì)被關(guān)閉,而是不斷的被循環(huán)使用,從而節(jié)約了啟動(dòng)和關(guān)閉連接的時(shí)間。
7.????參考文獻(xiàn)
https://blog.csdn.net/qq_40127655/article/details/80147358
https://www.yiibai.com/jdbc/jdbc-select-records.html?????????
http://alex4java.iteye.com/blog/2294833
http://www.itdecent.cn/p/bf7fde798851
今天的分享就到這里啦,歡迎大家點(diǎn)贊、轉(zhuǎn)發(fā)、留言、拍磚~
技能樹(shù).IT修真院“我們相信人人都可以成為一個(gè)工程師,現(xiàn)在開(kāi)始,找個(gè)師兄,帶你入門,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷?!?。
這里是技能樹(shù).IT修真院,成千上萬(wàn)的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化,成長(zhǎng)可見(jiàn)化,師兄1對(duì)1免費(fèi)指導(dǎo)??靵?lái)與我一起學(xué)習(xí)吧~我的邀請(qǐng)碼:26435812,或者你可以直接點(diǎn)擊此鏈接:http://www.jnshu.com/login/1/26435812。