零基礎(chǔ)入門(mén)JDBC-Java數(shù)據(jù)庫(kù)連接

數(shù)據(jù)庫(kù)實(shí)現(xiàn)了數(shù)據(jù)的持久化姑隅,但我們最終要在程序里處理數(shù)據(jù)啊,那java代碼中怎么去訪問(wèn)數(shù)據(jù)庫(kù)讀寫(xiě)數(shù)據(jù)呢倔撞?這就要用到sun公司設(shè)定的一套數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)了讲仰,這套標(biāo)準(zhǔn)就是JDBC(Java Database Connectivity)。但它只是規(guī)范痪蝇,不做具體實(shí)現(xiàn)鄙陡。于是數(shù)據(jù)庫(kù)廠商又根據(jù)JDBC標(biāo)準(zhǔn),實(shí)現(xiàn)自家的驅(qū)動(dòng)Driver霹俺。如:mysql驅(qū)動(dòng)com.mysql.cj.jdbc.Driver丙唧,Oracle的驅(qū)動(dòng)oracle.jdbc.OracleDriver想际。有了這套解決方案胡本,java就可以訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)了。

如有問(wèn)題可以觀看視頻:

https://www.bilibili.com/video/BV1Bt41137iB

Java中提倡面向接口開(kāi)發(fā),而最經(jīng)典的接口設(shè)計(jì)莫過(guò)于JDBC數(shù)據(jù)庫(kù)接口。

Connection鏈接、Statement語(yǔ)句恭取、PreparedStatement預(yù)處理語(yǔ)句柠横、CallableStatement存儲(chǔ)過(guò)程、ResultSet結(jié)果集。

調(diào)用方式有三種:

Statement語(yǔ)句、PreparedStatement預(yù)處理語(yǔ)句腹缩、CallableStatement存儲(chǔ)過(guò)程盘寡,推薦使用第二種PreparedStatement,防止SQL注入,其也是預(yù)編譯性能高。

使用步驟

導(dǎo)入jar包(豐富的工具類(lèi))

獲取和數(shù)據(jù)庫(kù)的連接(用戶(hù)名岔留、密碼)

通過(guò)程序執(zhí)行SQL

通過(guò)程序處理結(jié)果

idea 創(chuàng)建項(xiàng)目并導(dǎo)入jar包

創(chuàng)建stage2 Java工程

創(chuàng)建lib目錄进胯,拷貝驅(qū)動(dòng)objbc6-11.1.0.7.0到lib目錄下

項(xiàng)目引用這個(gè)外部jar包

入門(mén)案例

SQL注入

SQL注入的解決方案

JDBC常見(jiàn)問(wèn)題

Class.forName這句話(huà)有用沒(méi)?

Class.forName可以指定class類(lèi)路徑進(jìn)行動(dòng)態(tài)創(chuàng)建對(duì)象實(shí)例渣淳,可JDBC這句話(huà)沒(méi)有返回對(duì)象啊脾还,那寫(xiě)這句有什么作用呢?看看java.sql.Driver.class的源碼就找到真相了鄙漏,原來(lái)它用了靜態(tài)代碼塊創(chuàng)建對(duì)象。

寫(xiě)了創(chuàng)建了,那不寫(xiě)呢蝶涩?怎么不寫(xiě)也能執(zhí)行呢绿聘?

Java提供了SPI機(jī)制嗽上,用戶(hù)可以自行配置類(lèi),JDBC高版本驅(qū)動(dòng)就都引入了這個(gè)支持鲜屏。如果用戶(hù)使用了Class.forName方式就自己指定了驅(qū)動(dòng)烹看,如果未寫(xiě)這句話(huà),則Java自動(dòng)去META-INF/services/java.sql.Driver文件中找啟動(dòng)類(lèi)洛史。

驅(qū)動(dòng)版本

不同版本的mysql需要不同版本的驅(qū)動(dòng)

Mysql5.0x mysql-connector-java-5.1.32.jar

Mysql8.0x mysql-connector-java-8.0.21.jar

Driver變成了: com.mysql.cj.jdbc.Driver惯殊,中間多了cj

url必須加時(shí)區(qū)參數(shù): serverTimezone=Asia/Shanghai

中文亂碼

url增加參數(shù):characterEncoding=utf8防止中文亂碼

SQL注入

利用sql中'單撇是字符串的結(jié)束符,or只要一個(gè)條件成立其它就不用再判斷也殖,而惡意造成sql查詢(xún)失效土思,本應(yīng)該只展示一條數(shù)據(jù)务热,結(jié)果全部展現(xiàn)。

注入后形成的SQL:

大家試想如果是一個(gè)財(cái)務(wù)表己儒,本你只能看自己的信息崎岂,結(jié)果你看了所有人的信息。結(jié)果新員工比你工資高闪湾,你說(shuō)氣人不冲甘。

PreparedStatement 語(yǔ)句

SQL注入解決方案:

Statement對(duì)象換為PreparedStatement對(duì)象

PS后的結(jié)果:

利用轉(zhuǎn)義字符,屏蔽了SQL中的惡意字符途样。不僅解決了sql注入問(wèn)題江醇,使系統(tǒng)變的安全,PreparedStatement還有個(gè)極大的好處何暇,它是預(yù)編譯的語(yǔ)句陶夜,其主干部分mysql進(jìn)行預(yù)編譯后緩存,下次這部分就無(wú)需在解析裆站,只把條件拼入条辟,這樣執(zhí)行效率遠(yuǎn)高于statement每次都要編譯sql語(yǔ)句。

常見(jiàn)錯(cuò)誤

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

錯(cuò)誤原因:

1)jar沒(méi)有導(dǎo)入宏胯,沒(méi)有builder path

2)Class.forName("com.mysql.jdbc.Driver"); 字符串拼寫(xiě)錯(cuò)誤

Unknown database mydb;

錯(cuò)誤原因:

數(shù)據(jù)庫(kù)名稱(chēng)拼寫(xiě)錯(cuò)誤

Access denied for user ‘root123’@‘localhost’ (using password: YES)

錯(cuò)誤原因:

數(shù)據(jù)庫(kù)用戶(hù)名或者密碼錯(cuò)誤

Table ‘py-school-db.mydb’ doesn’t exist

錯(cuò)誤原因:

表不存在,也可能表名寫(xiě)錯(cuò)了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末羽嫡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子胳嘲,更是在濱河造成了極大的恐慌厂僧,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件了牛,死亡現(xiàn)場(chǎng)離奇詭異颜屠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鹰祸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)甫窟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蛙婴,你說(shuō)我怎么就攤上這事粗井。” “怎么了街图?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵浇衬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我餐济,道長(zhǎng)耘擂,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任絮姆,我火速辦了婚禮醉冤,結(jié)果婚禮上秩霍,老公的妹妹穿的比我還像新娘。我一直安慰自己蚁阳,他們只是感情好铃绒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著螺捐,像睡著了一般颠悬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上归粉,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天椿疗,我揣著相機(jī)與錄音,去河邊找鬼糠悼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛浅乔,可吹牛的內(nèi)容都是我干的倔喂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼靖苇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼席噩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起贤壁,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤悼枢,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后脾拆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體馒索,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年名船,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绰上。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渠驼,死狀恐怖蜈块,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迷扇,我是刑警寧澤百揭,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站蜓席,受9級(jí)特大地震影響器一,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瓮床,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一盹舞、第九天 我趴在偏房一處隱蔽的房頂上張望产镐。 院中可真熱鬧,春花似錦踢步、人聲如沸癣亚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)述雾。三九已至,卻和暖如春兼丰,著一層夾襖步出監(jiān)牢的瞬間玻孟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工鳍征, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留黍翎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓艳丛,卻偏偏與公主長(zhǎng)得像匣掸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子氮双,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容