版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、JDBC和數(shù)據(jù)庫馮天宇JDBC簡介JDBC(Java DataBase Connectivity)是Java語言用來連接和操作關系型數(shù)據(jù)庫的應用程序接口(API)。JDBC由一群類(Class)和接口(Interface)所組成,通過調(diào)用這些類和接口所提供的方法,我們可以連接不同的數(shù)據(jù)庫,對數(shù)據(jù)庫下達SQL命令并取得行結果。對程序開發(fā)人員來說,在Java程序中使用JDBC API來操作數(shù)據(jù)庫最大的好處是只要撰寫一次程序,然后搭建不同的JDBC驅動程序,便可以操作不同的數(shù)據(jù)庫,而在JSP程序中使用JDBC的API來連接數(shù)據(jù)庫,更可以讓前端使用者無須事先安裝任何的程序,只需要通過瀏覽器便可以存取遠
2、程數(shù)據(jù)庫。JDBC驅動程序的分類目前有四種可供使用的JDBC驅動程序,不同類型的的驅動程序有著不一樣的使用方法,所以當我們在連接數(shù)據(jù)庫之前,必須先依照我們的需求選擇一個適當?shù)尿寗映绦?,這四種不同類型的驅動程序分別是:JDBC-ODBC Bridge,橋接器型的驅動程序,這類驅動程序的特色是必須在使用者端的計算機上事先安裝好ODBC驅動程序,然后通過JDBC-ODBC的調(diào)用方法,進而通過ODBC類存取數(shù)據(jù)庫。JDBC-Native API Bridge,也是橋接器型驅動程序之一,如同類型一,這類型的驅動程序也必須先在使用者計算機上安裝好特定的驅動程序(類似ODBC),然后通過JDBC-Nativ
3、e API橋接器的轉換,把JAVA API調(diào)用轉換成特定驅動程序的調(diào)用方法,進而存取數(shù)據(jù)庫。JDBC-middleware,這類型的驅動程序最大的好處是省去了在使用者計算機上安裝任何驅動程序的麻煩,只需在服務器端安裝好middleware,而middleware會負責所有存取數(shù)據(jù)庫時必要的轉換。Pure JDBC driver,這類型的驅動程序是最成熟的JDBC驅動程序,不但無需在使用者計算機上安裝任何額外的驅動程序,也不需在服務器端安裝任何的中介程序(middleware),所有存取數(shù)據(jù)庫的操作,都直接由驅動程序來完成。一般而言,我們建議您不使用橋接器型的驅動程序,這類型的驅動程序不是用純J
4、AVA語言所開發(fā),這使得程序的可移植性會變差,而且還需要事先安裝其它的特定驅動程序在使用者計算機上,非常的麻煩。反觀類型三和類型四的驅動程序,不但使程序的可移植性提高,達到跨平臺的目的,還省去在使用者計算機上安裝其他驅動程序的麻煩,可謂一舉數(shù)得。所以當我們在為我們的數(shù)據(jù)庫選擇驅動程序時,應盡量以類型三和類型四的JDBC驅動程序為主,而類型一和二則為次要的選擇。JDBC驅動程序存取架構JDBC常用類與方法DriverManager類 這個類負責管理JDBC驅動程序。我們使用JDBC驅動程序之前,我們必須先將驅動程序加載并向DriverManager注冊后才可使用,在程序中可以通過Class.fo
5、rName()這個標準函數(shù)來完成。 DriverManager類也提供方法讓我們建立與數(shù)據(jù)庫的連接。如下表所示:JDBC常用類與方法表 1下面的范例將示范如何連接數(shù)據(jù)庫新增記錄(Record)范例這個程序示范了如何連接到postgreSQL數(shù)據(jù)庫,先看這一行: 因為在我們的范例中用到了JDBC提供的類和方法,所以在程序的開頭一定要加上這一行,否則將發(fā)生編譯錯誤。緊接著下面這一行: 只要我們希望在JSP網(wǎng)頁中存取數(shù)據(jù)庫中的中文,都必須在程序的開頭加上這一行,否則也將造成編譯上的錯誤。接下來這一行: Class.forName(driver); 便是通過java.lang.Class類提供的標準方
6、法forName()來向DriverManager注冊并加載我們想要使用的JDBC驅動程序,在這個范例中,我們使用的是postgreSQL的JDBC驅動程序。 關于Class.forName(driver)方法中driver參數(shù)的設定,會因為不同的JDBC驅動程序而有不同的設定,如何正確設定請參照各個驅動程序的說明文件。當我們通過Class.forName()方法正確的注冊并加載JDBC驅動程序后,接下來就要建立和數(shù)據(jù)庫的連接。請看下面這一行: Connection con= DriverManager.getConnection(url,user,password); 我們利用java.sq
7、l.DriverManager類提供的getConnection()方法來建立與數(shù)據(jù)庫的連接,其中參數(shù)url指定了數(shù)據(jù)庫的位置,user指定連接數(shù)據(jù)庫時的使用者名稱,password指定連接數(shù)據(jù)庫時的密碼。關于url的指定方法,一般的格式如下: jdbc: 在我們的范例程序中我們指定的url如下: url=“jdbc:postgresql:test”; 其中在的部分我們指定postgreSQL為我們所要連接的數(shù)據(jù)庫類型,在的部分我們則指定了所要使用的數(shù)據(jù)庫名稱test。讓我們再來看一個url的例子: jdbc:odbc:mydata 這個例子顯示出我們通過jdbc:odbc bridge連接到
8、mydata數(shù)據(jù)庫。當我們調(diào)用DriverManager.getConnection()方法之后,便會得到一個負責和數(shù)據(jù)庫連接的Connection類的對象,至此,我們便已順利的連接好數(shù)據(jù)庫。JDBC常用類與方法Connection類 Connection類對象負責維護JSP/Java數(shù)據(jù)庫程序和數(shù)據(jù)庫之間的聯(lián)機。通過Connection類提供的方法,我們可以建立另外三個非常有用的類對象,分別是Statement類、PreparedStatement類和Database Meta Data類,下面我們會分別針對這些類再做詳細的說明。表 2JDBC常用類與方法Statement類 通過State
9、ment類所提供的方法,我們可以利用標準的SQL命令,對數(shù)據(jù)庫直接進行新增、刪除或修改記錄(Record)的操作。見表3。JDBC常用類與方法表 3現(xiàn)在讓我們通過范例程序來說明如何使用Statement類所提供的方法操作我們的數(shù)據(jù)庫。下面的范例程序將test數(shù)據(jù)庫內(nèi)的phonebook數(shù)據(jù)表內(nèi)新增一筆記錄。 新增記錄(Record)范例 當我們得到一個Connection類的對象之后,緊接著便利用Connection類所提供的方法createStatement()建立一個Statement類對象,接著我們來看這一行程序代碼: smt.executeUpdate(“INSERT intophon
10、ebook(name,phone,addr,birth)” +“ values(張小強,12345678,西安市南窯頭,” +“TO_DATE(1980/02/30, YYYY/MM/DD)”); 我們將一個標準的SQL命令INSERT語句當成字符串參數(shù)傳給executeUpdate()方法,緊接著executeUpdate()方法便會通過由Connection類對象所維護的數(shù)據(jù)庫連接,實際將SQL命令傳給數(shù)據(jù)庫以進行新增記錄的操作。Note:executeQuery()方法和executeUpdate()方法的使用方式是相當類似的,它們都需要傳入一個標準的SQL命令作為參數(shù),主要的差別在于e
11、xecuteQuery()方法是專門處理查詢操作的。當我們使用SQL命令SELECT語句對數(shù)據(jù)庫做查詢時,就必須用executeQuery()方法,而executeQuery()方法會建立一個RecordSet類的對象保存查詢的結果,除了SELECT命令之外的其它SQL命令,如INSERT、DELETE、UPDATE、DROP等操作數(shù)據(jù)庫的語句,我們就可以通過executeUpdate()方法來執(zhí)行。JDBC常用類與方法PreparedStatement類 PreparedStatement類和Statement類的不同之處在于PreparedStatement類對象會將傳入的SQL命令事先編
12、好等待使用,所以當我們有單一的SQL指令被執(zhí)行多次時,用PreparedStatement類會比用Statement類來得有效率。如表3所示。表 3在下面這個程序中我們將示范如何使用PreparedStatement類對象來更新數(shù)據(jù)庫中的記錄。 修改記錄(Update)范例 首先,我們使用Connection類提供的preparedStatement()方法來建立PreparedStatement類對象,在這需要注意的是PreparedStatement類的“IN”參數(shù),也就是SQL命令中以“?”代替的部分,“IN”參數(shù)的類型必須和數(shù)據(jù)庫表格的字段(Field)類型一致,PreparedSta
13、tement類提供一系列的“set類型()”方法讓我們可以把java的數(shù)據(jù)類型轉換成適當?shù)淖侄晤愋?,最后使用executeUpdate()方法把我們的SQL命令傳給數(shù)據(jù)庫以完成修改記錄的操作。JDBC常用類與方法ResultSet類 當我們使用SELECT命令來對數(shù)據(jù)庫做查詢時,數(shù)據(jù)庫會響應我們查詢的結果,而ResultSet類對象負責存儲我們查詢數(shù)據(jù)庫的結果。值得一提的是ResultSet類實際上作了一系列的方法讓我們即使不使用標準的SQL命令也能對數(shù)據(jù)庫進行新增、刪除和修改記錄(Record)的操作。另外,ResultSet類對象也負責維護一個記錄指針(Cursor),記錄指針指向數(shù)據(jù)表格
14、(Table)中的某個記錄,通過適當?shù)囊苿佑涗浿羔?,我們可以隨心所欲的存取數(shù)據(jù)庫,進而加強程序的效率。如表4。表4下面的程序將示范如何使用ResultSet類 所提供的方法來移動記錄指針并且讀取記錄指針所指向記錄的字段(Field)值。 記錄指針(Cursor)范例 我們使用Statement類提供的方法executeQuery()查詢數(shù)據(jù)庫并將結果保存在ResultSet類對象中,請看這一行: ResultSet rst=smt.executeQuery(“SELECT * from phonebook”); executeQuery()方法將查詢phonebook數(shù)據(jù)表的結果保存在Resu
15、lt類對象中。我們在程序中使用了幾個移動記錄指針的方法,分別是beforeFirst()、first()、last()、absolute()和next(),并且使用getstring()方法取得phonebook數(shù)據(jù)表內(nèi)記錄指針所指向記錄的四個字段值。JDBC常用類與方法DatabaseMetaData類 DatabaseMetaData類保存了數(shù)據(jù)庫的所有特性,并且提供許多的方法來取得這些信息,詳細的使用方法請參照JDBC說明文件。JDBC常用類與方法表 5JDBC常用類與方法ResultSetMetaData類 ResultSetMetaData類對象保存了所有ResultSet類對象中關于字段(Field)的信息,并且也提供了許多方法來取得這些信息。如表6所示。JDBC常用類與方法表 6JDBC連接數(shù)據(jù)庫的模式與步驟加載驅動程序 Class.forName(driver);建立連接 Connection co
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度集裝箱貨物倉儲管理員工勞動合同范本2篇
- 個人提供財務咨詢服務協(xié)議(二零二四年度)2篇
- 2024葡萄酒連鎖專賣店合作協(xié)議規(guī)范文本3篇
- 2024鋁單板高空安裝及維護服務合同范本3篇
- 二零二五年度貝殼房產(chǎn)中介城市代理加盟協(xié)議3篇
- 二零二五年度跨境電商平臺干股合作協(xié)議示范3篇
- 2024年經(jīng)銷商代銷協(xié)議格式版B版
- 二零二五年度顧可離婚精神損害賠償協(xié)議3篇
- 二零二五年度網(wǎng)絡安全防護服務保密協(xié)議2篇
- 二零二四年度品牌合作關于聯(lián)合營銷推廣的合同
- 教師及教育系統(tǒng)事業(yè)單位工作人員年度考核登記表示例范本1-3-5
- 《產(chǎn)業(yè)鏈基礎理論》課件
- 殘疾兒童(孤獨癥)康復服務機構采購項目招標文件
- 6123C-基樁鉆芯法檢測報告-模板
- 少先隊活動課《民族團結一家親-同心共筑中國夢》課件
- 2023年江西南昌大學保衛(wèi)部(處)招聘考試真題
- 六年級語文下冊 期末復習非連續(xù)性文本閱讀專項訓練(一)(含答案)(部編版)
- 展會活動防疫工作方案
- 肝性腦病的護理課件-
- 2024年銀行考試-支付清算系統(tǒng)參與者考試近5年真題附答案
- 2024年丟失物品索償協(xié)議書模板
評論
0/150
提交評論