大家好略贮,我是IT修真院深圳分院第5期學員送挑,一枚正直善良的JAVA程序員诅福。
今天給大家分享一下,修真院官網(wǎng)JAVA任務1中需忿,JDBC部分的知識點——JDBC連接數(shù)據(jù)庫以及常用操作诅炉。
一、背景介紹
JDBC(java Database connectivity,數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API應用程序編程接口)屋厘,可以為多種關系數(shù)據(jù)庫(mysql涕烧,Oracle)提供統(tǒng)一訪問癌佩,它由一組用JAVA語言編寫的類和接口組成愉烙。可以實現(xiàn)對數(shù)據(jù)庫的增刪改查
二.知識剖析
1.有了JDBC API浅役,可以大量簡化重復性的代碼工作溢谤,就不必為訪問Mysql數(shù)據(jù)庫專門寫一個程序瞻凤,為訪問Oracle數(shù)據(jù)庫又專門寫一個程序,或為訪問DB2數(shù)據(jù)庫又編寫另一個程序等等世杀,程序員只需用JDBC API寫一個程序就夠了阀参,它可向相應數(shù)據(jù)庫發(fā)送SQL調(diào)用。
2.JDBC瞻坝,操作流程分成五個步驟
1).初始化驅(qū)動蛛壳,通過Driver接口。裝載MySql驅(qū)動:Class.forName("com.mysql.jdbc.Driver");裝載Oracle驅(qū)動:Class.forName("oracle.jdbc.driver.OracleDriver");
2).通過Connection對象建立與數(shù)據(jù)庫的連接,提供端口號3306衙荐,數(shù)據(jù)庫名稱how2java捞挥,賬號root,密碼****
3).創(chuàng)建執(zhí)行SQL語句的Statement忧吟。
4).setObject寫入數(shù)據(jù)砌函。理論上來講,任何set方法都可以用setObject代替溜族。
5).execute執(zhí)行更新讹俊。依次關閉ResultSet,Statement斩祭,Connection劣像。
3.Statement三種類
1).Statement,發(fā)送簡單SQL語句(代碼比較)
2).PreparedStatement發(fā)送含一或多個參數(shù)的SQL語句摧玫,比Statement效率高耳奕,可以進行批處理
3).CallableStatement,調(diào)用儲存過程
4.Statement方法
1).execute執(zhí)行查詢語句诬像,返回boolean類型屋群,true表示執(zhí)行的是查詢語句,false表示執(zhí)行的是insert,delete,update等等
2).executeQuery坏挠,運行select語句芍躏,返回ResultSet結(jié)果集
3).executeUpdate,運行insert降狠、update对竣、delete操作,返回int類型榜配,表示有多少條數(shù)據(jù)受到了影響否纬。
5.JDBC的常見用途
1).JDBC的增刪改,插入不同的SQL語句
2).注意查詢要返回數(shù)據(jù)
6.DAO(數(shù)據(jù)庫訪問對象)
先做DAO接口蛋褥,再做類临燃,類實現(xiàn)DAO接口,就必須提供接口中聲明的方法烙心,實現(xiàn)在語法上的關鍵字是implements膜廊。(接口和類的區(qū)別)接口是抽象方法的集合,通常以interface來聲明淫茵,沒有main方法爪瓜,用public修飾,接口無法被實例化匙瘪,但是可以被實現(xiàn)钥勋;類是一個模板炬转,它描述一類對象的行為和狀態(tài),一個實現(xiàn)接口的類算灸,必須實現(xiàn)接口內(nèi)所描述的所有方法,否則就必須聲明為抽象類驻啤,抽象類是被用來創(chuàng)建繼承層級里子類的模板菲驴。
7.連接池
1).當有多個線程,每個線程都需要連接數(shù)據(jù)庫執(zhí)行SQL語句的話骑冗,那么每個線程都會創(chuàng)建一個連接赊瞬,并且在使用完畢后,關閉連接贼涩。創(chuàng)建連接和關閉連接的過程也是比較消耗時間的巧涧,當多線程并發(fā)的時候,系統(tǒng)就會變得很卡頓遥倦。同時谤绳,一個數(shù)據(jù)庫同時支持的連接總數(shù)也是有限的,如果多線程并發(fā)量很大袒哥,那么數(shù)據(jù)庫連接的總數(shù)就會被消耗光缩筛,后續(xù)線程發(fā)起的數(shù)據(jù)庫連接就會失敗。
2.).連接池在使用之前堡称,就會創(chuàng)建好一定數(shù)量的連接瞎抛。 如果有任何線程需要使用連接,那么就從連接池里面借用却紧,而不是自己重新創(chuàng)建. 使用完畢后桐臊,又把這個連接歸還給連接池供下一次或者其他線程使用。 倘若發(fā)生多線程并發(fā)情況晓殊,連接池里的連接被借用光了断凶,那么其他線程就會臨時等待,直到有連接被歸還回來挺物,再繼續(xù)使用懒浮。整個過程,這些連接都不會被關閉识藤,而是不斷的被循環(huán)使用砚著,從而節(jié)約了啟動和關閉連接的時間.
三.常見問題
1.PreparedStatement和Statement有什么區(qū)別?
2.為什么采取了PreparedStatement痴昧,運行時間反倒變慢了稽穆?
4.解決方案
1.Statement每次執(zhí)行SQL語句,相關數(shù)據(jù)庫都要進行SQL語句編譯赶撰,PreparedStatement是預編譯舌镶,對批量處理大大提高效率柱彻,可以防止SQL注入攻擊,防止數(shù)據(jù)庫緩沖池溢出餐胀,代碼的可讀性哟楷,可維護性都更好(運行代碼)
2.preparedstatment是否能提高性能,實際要具體的看數(shù)據(jù)庫服務器端處理復雜SQL的情況否灾,對于oracle而言在復雜的SQL上面二者性能差異明顯(可以使用報表系統(tǒng)的SQL來測試)卖擅,而比較簡單的數(shù)據(jù)庫MySQL而言其性能提升不明顯。這和我們平時的觀念有所出入
六墨技、擴展思考
七惩阶、參考文獻
于博韜師兄的PPT
八、更多討論
提問1.如果JDBC不關閉連接會發(fā)生什么扣汪?存儲過程是什么断楷?
答:請求一個新的?Connection?對象會帶來大量的開銷和很多潛在的錯誤.
浪費內(nèi)存。如果太多的話,可能導致后面的程序連不到數(shù)據(jù)庫
提問2.儲存過程是什么崭别?
答:存儲過程(Stored Procedure)是在大型數(shù)據(jù)庫系統(tǒng)中冬筒,一組為了完成特定功能的SQL 語句集,存儲在數(shù)據(jù)庫中紊遵,經(jīng)過第一次編譯后再次調(diào)用不需要再次編譯账千,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。存儲過程是數(shù)據(jù)庫中的一個重要對象暗膜。
詳見視頻
感謝大家觀看
今天的分享就到這里啦匀奏,歡迎大家點贊、轉(zhuǎn)發(fā)学搜、留言娃善、拍磚~
技能樹.IT修真院
“我們相信人人都可以成為一個工程師,現(xiàn)在開始瑞佩,找個師兄聚磺,帶你入門,掌控自己學習的節(jié)奏炬丸,學習的路上不再迷锰鼻蓿”。
這里是技能樹.IT修真院稠炬,成千上萬的師兄在這里找到了自己的學習路線焕阿,學習透明化,成長可見化首启,師兄1對1免費指導暮屡。快來與我一起學習吧~
我的邀請碼:19214843毅桃,
或者你可以直接點擊此鏈接:http://www.jnshu.com/login/1/19214843
作者:kewangbuji
鏈接:
來源:簡書
著作權(quán)歸作者所有褒纲。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)准夷,非商業(yè)轉(zhuǎn)載請注明出處。