




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章JAVA數(shù)據(jù)庫編程應(yīng)用JDBC鏈接SQLServer2005數(shù)據(jù)庫大綱JDBC介紹實驗前的準備——相關(guān)軟件的安裝JDBC數(shù)據(jù)庫訪問流程實驗要求3.1JDBCJava和JDBC有著跨平臺運行的優(yōu)勢。用Java和JDBC(JavaDatabaseConnectivity)編寫的數(shù)據(jù)庫程序既可以在Windows系列操作系統(tǒng)上計算機上運行,也可以在Unix服務(wù)器上運行,還可以在Java平臺支持的數(shù)據(jù)庫設(shè)備上運行。JDBC是用于執(zhí)行SQL語句的JAVA應(yīng)用程序接口,是一套API集合,在這個集合中設(shè)置了許多允許JAVA程序連接數(shù)據(jù)庫的框架。3.1JDBCJava應(yīng)用程序JDBC驅(qū)動程序、管理器廠家提供的JDBC驅(qū)動程序JDBC-ODBC橋JDBC驅(qū)動程序APIODBC驅(qū)動程序數(shù)據(jù)庫JDBCAPI負責與JDBC管理器驅(qū)動程序API進行通信,將各個不同的SQL語句發(fā)送給它。驅(qū)動程序管理器API(對程序員是透明的)與實際連接到數(shù)據(jù)的各個第三方驅(qū)動程序進行通信,并且返回查詢的的信息,或者執(zhí)行由查詢規(guī)定的操作。3.1JDBCJDBC的主要功能如下:與一個數(shù)據(jù)庫建立連接(connection)。向數(shù)據(jù)庫發(fā)送SQL語句(statement)。處理數(shù)據(jù)庫返回的結(jié)果(resultset)。1、Java應(yīng)用程序Java程序主要包括Java應(yīng)用程序、java小程序和Servlet,這些類型的程序都可以利用JDBC方法實現(xiàn)對數(shù)據(jù)庫的訪問和操作。主要完成的任務(wù)包括:請求與數(shù)據(jù)庫建立連接、向數(shù)據(jù)庫發(fā)送SQL請求、為結(jié)果集定義存儲應(yīng)用和數(shù)據(jù)類型、查詢結(jié)果、處理錯誤、控制傳輸、提交、關(guān)閉連接等操作。2、JDBC管理器JDBC管理器提供了一個“驅(qū)動器管理器”,它能夠動態(tài)管理和維護數(shù)據(jù)庫查詢所需要的所有驅(qū)動程序?qū)ο?,實現(xiàn)Java程序與特定驅(qū)動程序的連接,從而體現(xiàn)JDBC與平臺無關(guān)的特性。其主要任務(wù)包括:為特定數(shù)據(jù)庫選擇驅(qū)動程序、處理JDBC的初始化調(diào)用、為每個驅(qū)動程序提供JDBC功能的入口、為JDBC調(diào)用執(zhí)行參數(shù)等。3、驅(qū)動程序驅(qū)動程序處理JDBC方法,向特定數(shù)據(jù)庫發(fā)送SQL請求,并為JAVA程序獲取結(jié)果。JDBC是獨立于數(shù)據(jù)庫管理系統(tǒng)的,每一個數(shù)據(jù)庫都有自己的協(xié)議與客戶機通信,JDBC利用數(shù)據(jù)庫驅(qū)動程序來使用這些數(shù)據(jù)庫引擎。JDBC驅(qū)動程序由數(shù)據(jù)庫和第三方軟件商提供,程序中所使用的數(shù)據(jù)庫系統(tǒng)不同,所需要的驅(qū)動程序也有所不同。其任務(wù)包括:建立與數(shù)據(jù)庫的連接、向數(shù)據(jù)庫發(fā)送請求、翻譯用戶程序請求、將錯誤代碼格式化成標準的JDBC錯誤代碼JDBC驅(qū)動程序類型類型一JDBC-ODBC橋接的JDBC驅(qū)動程序通過JDBC-ODBCBridge的轉(zhuǎn)換,將Java程序中使用的JDBCAPI轉(zhuǎn)換成ODBCAPI,然后通過ODBC來從數(shù)據(jù)庫中提取數(shù)據(jù)。類型二把JDBCAPI直接映射為數(shù)據(jù)庫供應(yīng)商提供(并非所有數(shù)據(jù)庫供應(yīng)商都會提供,例如ACCESS就不提供)的專用客戶端API的JDBC驅(qū)動程序。通過JDBC-NativeAPIBridge的轉(zhuǎn)換,將Java程序中使用的JDBCAPI轉(zhuǎn)換成NativeAPI,然后從數(shù)據(jù)庫中提取數(shù)據(jù)。類型三支持三層JDBC訪問的JDBC驅(qū)動程序類型四完全使用JAVA編寫的JDBC驅(qū)動程序,它直接與數(shù)據(jù)庫實例對話。JDBCAPI類類型 JDBC類驅(qū)動程序管理Java.sql.Driverjava.sql.DriverManagerjava.sql.DrivePropertyInfo數(shù)據(jù)庫連接Java.sql.ConnectionSQL語句java.sql.Statementjava.sql.PreparedStatementjava.sql.CallableStatement數(shù)據(jù)java.sql.ResultSet錯誤java.sql.SQLExceptionjava.sql.SQLWarningJDBC類層次
驅(qū)動程序管理器連接連接連接語句語句可調(diào)用語句準備語句executeUpdate()executeQuery()execute()getMoreResults()結(jié)果組元數(shù)據(jù)數(shù)據(jù)getResultsSet()數(shù)據(jù)庫訪問接口目前許多數(shù)據(jù)庫均支持SQL,對于由SQL數(shù)據(jù)庫組成的異構(gòu)數(shù)據(jù)庫系統(tǒng),JDBC和ODBC為訪問其異構(gòu)成員提供了統(tǒng)一的方式。圖2.7“DatabaseOptions”對話框安裝SQLServer2005的JDBC程序安裝SQLServer2005的JDBC程序4、安裝后得到3個jar文件:(C:\ProgramFiles\MicrosoftSQLServer2005DriverforJDBC\lib)msutil.jar、msbase.jar、mssqlserver.jar,將他們復(fù)制到j(luò)ava的lib目錄下,如D:\jdk1.4\lib5、設(shè)置系統(tǒng)classpath環(huán)境變量,把4中三個文件的路徑添加進來。圖2.9Ex_ODBC運行結(jié)果JDBC數(shù)據(jù)庫訪問流程 1.建立數(shù)據(jù)源(odbc)2.裝入JDBC驅(qū)動程序3.建立連接4.執(zhí)行SQL語句5.檢索結(jié)果6.關(guān)閉連接圖2.8為控件添加數(shù)據(jù)成員JDBC數(shù)據(jù)庫訪問流程在Java.sql中有4個主要的類可以實現(xiàn)數(shù)據(jù)存儲。DriverManager負責加載和處理給定的JDBC驅(qū)動程序Connection表示同一個特定數(shù)據(jù)庫進行連接的對象Statement是SQL語句的載體ResultSet是結(jié)果集對象1.建立數(shù)據(jù)源這里所建立的數(shù)據(jù)源是指建立ODBC數(shù)據(jù)源,這一點并不是JDBC的要求,而是ODBC所必須的。當使用JDBC-ODBC橋接來建立連接時,必須先建立ODBC數(shù)據(jù)源。2.裝入JDBC驅(qū)動程序要使用JDBC來訪問數(shù)據(jù)庫,需要加載JDBC驅(qū)動程序,代碼語句: Class.forName()對于JDBC的驅(qū)動訪問來說,是Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);對于JDBC-ODBC橋接來說,則是 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);3.建立連接要連接一個數(shù)據(jù)庫,必須創(chuàng)建Connection類的一個實例,即調(diào)用方法DriverManger.getConnection。與數(shù)據(jù)庫建立連接標準方法是調(diào)用方法: DriverManager.getConnection(Stringurl,Stringuser,Stringpassword); DriverManager.getConnection(Stringurl); 返回值是Connection類的實例。url標準語法是 jdbc:<subprotocol>:<subname>subprotocol說明了使用哪種JDBC驅(qū)動程序,例如:使用JDBC-ODBC,就寫“odbc”,Subname就是數(shù)據(jù)源名。圖2.14“MFCClassWizard”對話框3.建立連接對于JDBC-ODBC橋接來講,subname就是數(shù)據(jù)源名,為了存取數(shù)據(jù),還要提供用戶和口令。Stringurl=“jdbc:odbc:source”;Connectioncon=DriveManager.getConnection(url,“user”,“password”)Source是事先建立的數(shù)據(jù)源4.執(zhí)行SQL語句建立連接后,就能夠向數(shù)據(jù)庫發(fā)送SQL語句了。JDBC提供了Statement類來發(fā)送SQL語句,Statement類的對象用createStatement方法創(chuàng)建;SQL語句發(fā)送以后,返回的結(jié)果通常存放在一個ResultSet類的對象中,ResultSet可以看作是一個表,這個表中包含由SQL返回的列名和相應(yīng)的值,ResultSet對象中維持了一個指向當前行的指針,通過一系列的getXXX方法,可以檢索當前行的各個列,并顯示出來。5.檢索結(jié)果對Result對象進行處理之后,才能將查詢結(jié)果顯示給用戶。Result對象包括一個由查詢語句返回的一個表ResultSet,這個表中包含所有的查詢結(jié)果。對Result對象的處理必須逐行進行,ResultSet.next方法使指針下移一行。
6.關(guān)閉連接連接在對象使用完畢后,應(yīng)當使用close()方法解除與數(shù)據(jù)庫的連接,并關(guān)閉數(shù)據(jù)庫。例如:con.close();JDBC編程實例//創(chuàng)建顧客consumer表,此表有三個字段:顧客編號id,姓名name,購物總金額totalmoneyimportjava.sql.*;publicclassCreate_Table{publicstaticvoidmain(String[]args){StringJDriver="sun.jdbc.odbc.JdbcOdbcDriver";//聲明jdbc驅(qū)動程序類型StringconURL="jdbc:odbc:student";//定義jdbc的url對象try{Class.forName(JDriver);}//加載jdbc-odbc橋驅(qū)動程序catch(java.lang.ClassNotFoundExceptione){System.out.println("forname:"+e.getMessage());}try{Connectioncon=DriverManager.getConnection(conURL);//連接數(shù)據(jù)庫URLStatements=con.createStatement();//建立Statement類對象 //創(chuàng)建一個含有三個字段的顧客表conumser Stringquery="createtableconsumer(idchar(10),namechar(15),totalmoneyinteger)";s.executeUpdate(query);//執(zhí)行SQL語句s.close();//釋放statement所連接的數(shù)據(jù)庫及jdbc資源 con.close();//關(guān)閉與數(shù)據(jù)庫的連接}catch(SQLExceptione){System.out.println("SQLException:"+e.getMessage());}}}示例程序Insert_Record//在上例創(chuàng)建的數(shù)據(jù)表consumer中插入三個顧客的紀錄
importjava.sql.*;publicclassInsert_Record{publicstaticvoidmain(String[]args){StringJDriver="sun.jdbc.odbc.JdbcOdbcDriver";StringconURL="jdbc:odbc:student";try{Class.forName(JDriver);}catch(java.lang.ClassNotFoundExceptione){System.out.println("forname:"+e.getMessage());}try{Connectioncon=DriverManager.getConnection(conURL);//使用SQL命令insert插入三條顧客紀錄到表中Statements=con.createStatement();Stringr1="insertintoconsumervalues('00001','王明',360)";Stringr2="insertintoconsumervalues('00002','高強',728)";Stringr3="insertintoconsumervalues('00003','李麗',1182)";s.executeUpdate(r1);s.executeUpdate(r2);s.executeUpdate(r3);s.close();con.close();}catch(SQLExceptione){System.out.println("SQLException:"+e.getMessage());}}}示例程序Update_Record//修改上例中的第二條和第三條紀錄的顧客總消費金額字段的值,并把數(shù)據(jù)表的內(nèi)容輸出到屏幕上importjava.sql.*;publicclassUpdate_Record{publicstaticvoidmain(String[]args){StringJdriver="sun.jdbc.odbc.JdbcOdbcDriver";StringconURL="jdbc:odbc:TestDB";String[]id={"00002","00003"};int[]totalmoney={989,1260};try{Class.forName(Jdriver);}catch(java.lang.ClassNotFoundExceptione){System.out.println("forname:"+e.getMessage());}try{Connectioncon=DriverManager.getConnection(conURL);
示例程序Update_Record//修改數(shù)據(jù)庫中數(shù)據(jù)表的內(nèi)容PreparedStatementps=con.prepareStatement("UPDATEconsumersettotalmoney=?whereid=?");inti=0,idlen=id.length;do{ps.setInt(1,totalmoney[i]); ps.setString(2,id[i]);ps.executeUpdate();++i;}while(i<id.length);ps.close();//查詢數(shù)據(jù)庫并把數(shù)據(jù)表的內(nèi)容輸出到屏幕上Statements=con.createStatement();ResultSetrs=s.executeQuery("select*fromconsumer");while(rs.next()){System.out.println(rs.getString("id")+"\t"+rs.getString("name")+"\t"+rs.getInt("totalmoney"));} s.close();con.close();}catch(SQLExceptione){System.out.println("SQLException:"+e.getMessage());}}}示例程序Delete_Record//在上例創(chuàng)建的數(shù)據(jù)表consumer中刪除第二條記錄,然后把數(shù)據(jù)表的內(nèi)容輸出importjava.sql.*;publicclassDelete_Record{publicstaticvoidmain(String[]args){StringJdriver="sun.jdbc.odbc.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公司廠級員工安全培訓(xùn)考試試題含完整答案(考點梳理)
- 2024-2025公司主要負責人安全培訓(xùn)考試試題含完整答案(各地真題)
- 磁控并聯(lián)電抗器企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 精煉銅絲企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 普通閥門企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 碎石攤鋪機企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 坐具企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 開式機械式壓力機企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 在線能源計量、檢測技術(shù)和設(shè)備企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 產(chǎn)品市場調(diào)研報告歸因歸功重點基礎(chǔ)知識點
- 網(wǎng)格員安全培訓(xùn)
- Environmental Biotechnology知到智慧樹章節(jié)測試課后答案2024年秋哈爾濱工業(yè)大學(xué)
- 《珠三角地區(qū)環(huán)境質(zhì)量與經(jīng)濟發(fā)展的實證探究》8800字(論文)
- 通訊設(shè)備故障處理預(yù)案
- 帝豪EV450維修手冊
- 市政工程管線之間及其構(gòu)筑物之間最小水平距離要求
- 數(shù)字經(jīng)濟學(xué)-教學(xué)案例及答案 唐要家
- 【S鎮(zhèn)35kV變電站一次系統(tǒng)設(shè)計(論文)14000字】
- V帶傳動設(shè)計說明書
- 酒店投標書范本
- 與農(nóng)戶的收購協(xié)議書范本
評論
0/150
提交評論