聲明:本欄目所使用的素材都是凱哥學(xué)堂VIP學(xué)員所寫,學(xué)員有權(quán)匿名,對文章有最終解釋權(quán);凱哥學(xué)堂旨在促進(jìn)VIP學(xué)員互相學(xué)習(xí)的基礎(chǔ)上公開筆記。
JDBC的介紹:
1.JDBC設(shè)計理念:
java依賴數(shù)據(jù)庫去存儲程序需要的數(shù)據(jù)龄章,我們用java寫好一個程序后,我們會把這個程序所需要的數(shù)據(jù)都存儲到數(shù)據(jù)庫中乞封,當(dāng)客戶運(yùn)行程序時做裙,程序需要讀取數(shù)據(jù)庫中的數(shù)據(jù),實(shí)現(xiàn)這個操作的就是JDBC肃晚。而為了規(guī)范锚贱,為了統(tǒng)一管理,把責(zé)任都轉(zhuǎn)給數(shù)據(jù)庫開發(fā)商(在接口中詳細(xì)講解過)关串,java只負(fù)責(zé)寫出一系列的接口惋鸥,至于怎么去實(shí)現(xiàn)【學(xué)Java,到凱哥學(xué)堂kaige123.com】這些接口悍缠,那就都是數(shù)據(jù)庫開發(fā)商的事情了卦绣,所以JDBC API中除了有一個操作類其他都是接口。
2.什么是驅(qū)動類:
數(shù)據(jù)庫開發(fā)商為了能讓java程序連接到自己的數(shù)據(jù)庫上飞蚓,他們就必須要自己寫實(shí)現(xiàn)這些接口的類滤港,然后打成jar包交給程序員,這樣只要程序員將這些jar包加入到工程中去,那這個程序就可以讀取數(shù)據(jù)庫里面的數(shù)據(jù)了溅漾。而這些實(shí)現(xiàn)接口的操作類就被稱為驅(qū)動類山叮。
3.JDBC常用接口介紹(在java.sql包下面):
DirverManager(驅(qū)動管理員):這是一個操作類,用于創(chuàng)建Connection對象添履。
Connection:數(shù)據(jù)庫連接對象
Statement:SQL執(zhí)行對象
PreparedStatement:SQL預(yù)處理執(zhí)行對象
ResultSet:查詢的結(jié)果集
ResultSetMetaData:查詢表結(jié)構(gòu)
CallableStatement:存儲過程調(diào)用
連接數(shù)據(jù)庫步驟:
1.要連接什么數(shù)據(jù)庫就去找什么數(shù)據(jù)庫的驅(qū)動然后添加到工程中去屁倔,其實(shí)就是下載相應(yīng)的jar包(下面以連接MySQL數(shù)據(jù)庫為例):
1.1Maven工程:
![image](http://os78f4hny.bkt.clouddn.com/201708240001.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
去中央庫找到此jar包,在pom中添加依賴即可:
1.2普通java工程:
找到工程jar包暮胧,將其復(fù)制到工程中锐借,然后選中工程中的這個jar包,右鍵點(diǎn)擊添加到Build Path中即可往衷,jar包可自行上網(wǎng)下載钞翔,此處本人采用的是上述Maven工程下載下來的jar包。
注意:如果想刪除此jar包席舍,需先選中對應(yīng)的那個小瓶子圖案然后右鍵選擇remove from build path布轿,再刪除粘貼進(jìn)去的jar包即可。
2啟動數(shù)據(jù)庫来颤,保證數(shù)據(jù)庫可以網(wǎng)絡(luò)連接方式
3加載驅(qū)動
![image](http://os78f4hny.bkt.clouddn.com/201708240002.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
![image](http://os78f4hny.bkt.clouddn.com/201708240003.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
![image](http://os78f4hny.bkt.clouddn.com/201708240004.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
3.1加載驅(qū)動的原理和目的:加載驅(qū)動實(shí)際上就是為了加載Driver類汰扭,這樣Driver類里面的靜態(tài)塊就會執(zhí)行,執(zhí)行后就會馬上注冊驅(qū)動到驅(qū)動管理員類中福铅。下圖是Driver類里面的內(nèi)容:
所以首先我們要加載Driver類:加載類有多種方式东且,可以new它的對象,可以用專門加載類的方法Class.forName()等本讥,一般我們都傾向于使用加載類的方法,代碼如下圖:
3.2有些數(shù)據(jù)庫其實(shí)已經(jīng)自動幫我們加載Driver類了鲁冯,所以就算我們在代碼中不加載Driver類拷沸,運(yùn)行時也會自動幫我們加載,如MySQL和Oracle數(shù)據(jù)庫就是這樣的薯演。
3.3如何判斷數(shù)據(jù)庫有沒有自動幫我們加載Driver類:在數(shù)據(jù)庫jar包中看看有沒有在META-INF/servies目錄下寫著自動加載的文件撞芍。以MySQL為例,在其目錄下找到了java.sql.Driver文件跨扮,里面內(nèi)容如下:
4.使用DriverManager管理員序无,創(chuàng)建Connection對象
4.1在創(chuàng)建對象時,我們需要傳進(jìn)三個參數(shù):url衡创,用戶名帝嗡,密碼
4.2 url:用來告訴類連接的是什么數(shù)據(jù)庫,服務(wù)器的地址和端口璃氢,數(shù)據(jù)庫名字以及其它設(shè)置(如字體設(shè)置之類的)
4.3 MySQL中url的寫法:
4.3.1默認(rèn)本地和默認(rèn)的3306端口:
jdbc:mysql:///數(shù)據(jù)庫名字
4.3.2自定義:
jdbc:mysql://服務(wù)器地址:服務(wù)器端口/數(shù)據(jù)庫名字
如果用此種方式寫默認(rèn)的那就是
jdbc:mysql://localhost(寫本地地址):3306/mysql
4.3.3解決中文亂碼問題(如果數(shù)據(jù)庫里的是中文而導(dǎo)出來的不是中文或者加進(jìn)去的是中文哟玷,但在數(shù)據(jù)庫中卻是以亂碼的形式存在則可以用此種寫法解決)
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
注意:此處設(shè)置的字符集和數(shù)據(jù)庫中的字符集要一致,這里是UTF-8一也,那么數(shù)據(jù)庫中也必須是UTF-8巢寡。
4.4代碼實(shí)現(xiàn):
![image](http://os78f4hny.bkt.clouddn.com/201708240005.jpg?imageMogr2/blur/1x0/quality/75%7Cwatermark/1/image/aHR0cDovL29zNzhmNGhueS5ia3QuY2xvdWRkbi5jb20vd2F0ZXJtYXJrLnBuZw==/dissolve/50/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
5.各種數(shù)據(jù)庫連接的代碼提示要點(diǎn):
oracle數(shù)據(jù)庫
driverClass:oracle.jdbc.driver.OracleDriver
url:jdbc:oracle:thin:@127.0.0.1:1521:dbname
mysql數(shù)據(jù)庫
driverClass:com.mysql.jdbc.Driver
(PS:有的時候喉脖,mysql的驅(qū)動類也也會看到使用org.gjt.mm.mysql.Driver 的情況,org.gjt.mm.mysql.Driver是早期的驅(qū)動名稱抑月,后來就改名為com.mysql.jdbc.Driver树叽,現(xiàn)在一般都推薦使用 com.mysql.jdbc.Driver。在最新版本 的mysql jdbc驅(qū)動中谦絮,為了保持對老版本的兼容题诵,仍然保留了 org.gjt.mm.mysql.Driver,但是實(shí)際上 org.gjt.mm.mysql.Driver中調(diào)用了 com.mysql.jdbc.Driver挨稿,因此現(xiàn)在這兩個驅(qū)動沒有什么區(qū)別仇轻。)
url:jdbc:mysql://localhost:3306/mydb
DB2數(shù)據(jù)庫
driverClass:com.ibm.db2.jcc.DB2Driver
url:jdbc:db2://127.0.0.1:50000/dbname
sybase數(shù)據(jù)庫
driverClass:com.sybase.jdbc.SybDriver
url:jdbc:sybase:Tds:localhost:5007/dbname
PostgreSQL數(shù)據(jù)庫
driverClass:org.postgresql.Driver
url:jdbc:postgresql://localhost/dbname
Sql Server2000數(shù)據(jù)庫
driverClass:com.microsoft.jdbc.sqlserver.SQLServerDriver
url:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbname
Sql Server2005數(shù)據(jù)庫
driverClass:com.microsoft.sqlserver.jdbc.SQLServerDriver
url:jdbc:sqlserver://localhost:1433; DatabaseName=dbname
?