第3章 JAVA 數(shù)據(jù)庫編程(JAVA前臺(tái)與數(shù)據(jù)庫的連接)_第1頁
第3章 JAVA 數(shù)據(jù)庫編程(JAVA前臺(tái)與數(shù)據(jù)庫的連接)_第2頁
第3章 JAVA 數(shù)據(jù)庫編程(JAVA前臺(tái)與數(shù)據(jù)庫的連接)_第3頁
第3章 JAVA 數(shù)據(jù)庫編程(JAVA前臺(tái)與數(shù)據(jù)庫的連接)_第4頁
第3章 JAVA 數(shù)據(jù)庫編程(JAVA前臺(tái)與數(shù)據(jù)庫的連接)_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第3章JAVA數(shù)據(jù)庫編程應(yīng)用JDBC鏈接SQLServer2005數(shù)據(jù)庫大綱JDBC介紹實(shí)驗(yàn)前的準(zhǔn)備——相關(guān)軟件的安裝JDBC數(shù)據(jù)庫訪問流程實(shí)驗(yàn)要求3.1JDBCJava和JDBC有著跨平臺(tái)運(yùn)行的優(yōu)勢。用Java和JDBC(JavaDatabaseConnectivity)編寫的數(shù)據(jù)庫程序既可以在Windows系列操作系統(tǒng)上計(jì)算機(jī)上運(yùn)行,也可以在Unix服務(wù)器上運(yùn)行,還可以在Java平臺(tái)支持的數(shù)據(jù)庫設(shè)備上運(yùn)行。JDBC是用于執(zhí)行SQL語句的JAVA應(yīng)用程序接口,是一套API集合,在這個(gè)集合中設(shè)置了許多允許JAVA程序連接數(shù)據(jù)庫的框架。3.1JDBCJava應(yīng)用程序JDBC驅(qū)動(dòng)程序、管理器廠家提供的JDBC驅(qū)動(dòng)程序JDBC-ODBC橋JDBC驅(qū)動(dòng)程序APIODBC驅(qū)動(dòng)程序數(shù)據(jù)庫JDBCAPI負(fù)責(zé)與JDBC管理器驅(qū)動(dòng)程序API進(jìn)行通信,將各個(gè)不同的SQL語句發(fā)送給它。驅(qū)動(dòng)程序管理器API(對(duì)程序員是透明的)與實(shí)際連接到數(shù)據(jù)的各個(gè)第三方驅(qū)動(dòng)程序進(jìn)行通信,并且返回查詢的的信息,或者執(zhí)行由查詢規(guī)定的操作。3.1JDBCJDBC的主要功能如下:與一個(gè)數(shù)據(jù)庫建立連接(connection)。向數(shù)據(jù)庫發(fā)送SQL語句(statement)。處理數(shù)據(jù)庫返回的結(jié)果(resultset)。1、Java應(yīng)用程序Java程序主要包括Java應(yīng)用程序、java小程序和Servlet,這些類型的程序都可以利用JDBC方法實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的訪問和操作。主要完成的任務(wù)包括:請(qǐng)求與數(shù)據(jù)庫建立連接、向數(shù)據(jù)庫發(fā)送SQL請(qǐng)求、為結(jié)果集定義存儲(chǔ)應(yīng)用和數(shù)據(jù)類型、查詢結(jié)果、處理錯(cuò)誤、控制傳輸、提交、關(guān)閉連接等操作。2、JDBC管理器JDBC管理器提供了一個(gè)“驅(qū)動(dòng)器管理器”,它能夠動(dòng)態(tài)管理和維護(hù)數(shù)據(jù)庫查詢所需要的所有驅(qū)動(dòng)程序?qū)ο?,?shí)現(xiàn)Java程序與特定驅(qū)動(dòng)程序的連接,從而體現(xiàn)JDBC與平臺(tái)無關(guān)的特性。其主要任務(wù)包括:為特定數(shù)據(jù)庫選擇驅(qū)動(dòng)程序、處理JDBC的初始化調(diào)用、為每個(gè)驅(qū)動(dòng)程序提供JDBC功能的入口、為JDBC調(diào)用執(zhí)行參數(shù)等。3、驅(qū)動(dòng)程序驅(qū)動(dòng)程序處理JDBC方法,向特定數(shù)據(jù)庫發(fā)送SQL請(qǐng)求,并為JAVA程序獲取結(jié)果。JDBC是獨(dú)立于數(shù)據(jù)庫管理系統(tǒng)的,每一個(gè)數(shù)據(jù)庫都有自己的協(xié)議與客戶機(jī)通信,JDBC利用數(shù)據(jù)庫驅(qū)動(dòng)程序來使用這些數(shù)據(jù)庫引擎。JDBC驅(qū)動(dòng)程序由數(shù)據(jù)庫和第三方軟件商提供,程序中所使用的數(shù)據(jù)庫系統(tǒng)不同,所需要的驅(qū)動(dòng)程序也有所不同。其任務(wù)包括:建立與數(shù)據(jù)庫的連接、向數(shù)據(jù)庫發(fā)送請(qǐng)求、翻譯用戶程序請(qǐng)求、將錯(cuò)誤代碼格式化成標(biāo)準(zhǔn)的JDBC錯(cuò)誤代碼JDBC驅(qū)動(dòng)程序類型類型一JDBC-ODBC橋接的JDBC驅(qū)動(dòng)程序通過JDBC-ODBCBridge的轉(zhuǎn)換,將Java程序中使用的JDBCAPI轉(zhuǎn)換成ODBCAPI,然后通過ODBC來從數(shù)據(jù)庫中提取數(shù)據(jù)。類型二把JDBCAPI直接映射為數(shù)據(jù)庫供應(yīng)商提供(并非所有數(shù)據(jù)庫供應(yīng)商都會(huì)提供,例如ACCESS就不提供)的專用客戶端API的JDBC驅(qū)動(dòng)程序。通過JDBC-NativeAPIBridge的轉(zhuǎn)換,將Java程序中使用的JDBCAPI轉(zhuǎn)換成NativeAPI,然后從數(shù)據(jù)庫中提取數(shù)據(jù)。類型三支持三層JDBC訪問的JDBC驅(qū)動(dòng)程序類型四完全使用JAVA編寫的JDBC驅(qū)動(dòng)程序,它直接與數(shù)據(jù)庫實(shí)例對(duì)話。JDBCAPI類類型 JDBC類驅(qū)動(dòng)程序管理Java.sql.Driverjava.sql.DriverManagerjava.sql.DrivePropertyInfo數(shù)據(jù)庫連接Java.sql.ConnectionSQL語句java.sql.Statementjava.sql.PreparedStatementjava.sql.CallableStatement數(shù)據(jù)java.sql.ResultSet錯(cuò)誤java.sql.SQLExceptionjava.sql.SQLWarningJDBC類層次

驅(qū)動(dòng)程序管理器連接連接連接語句語句可調(diào)用語句準(zhǔn)備語句executeUpdate()executeQuery()execute()getMoreResults()結(jié)果組元數(shù)據(jù)數(shù)據(jù)getResultsSet()數(shù)據(jù)庫訪問接口目前許多數(shù)據(jù)庫均支持SQL,對(duì)于由SQL數(shù)據(jù)庫組成的異構(gòu)數(shù)據(jù)庫系統(tǒng),JDBC和ODBC為訪問其異構(gòu)成員提供了統(tǒng)一的方式。圖2.7“DatabaseOptions”對(duì)話框安裝SQLServer2005的JDBC程序安裝SQLServer2005的JDBC程序4、安裝后得到3個(gè)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中三個(gè)文件的路徑添加進(jìn)來。圖2.9Ex_ODBC運(yùn)行結(jié)果JDBC數(shù)據(jù)庫訪問流程 1.建立數(shù)據(jù)源(odbc)2.裝入JDBC驅(qū)動(dòng)程序3.建立連接4.執(zhí)行SQL語句5.檢索結(jié)果6.關(guān)閉連接圖2.8為控件添加數(shù)據(jù)成員JDBC數(shù)據(jù)庫訪問流程在Java.sql中有4個(gè)主要的類可以實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)。DriverManager負(fù)責(zé)加載和處理給定的JDBC驅(qū)動(dòng)程序Connection表示同一個(gè)特定數(shù)據(jù)庫進(jìn)行連接的對(duì)象Statement是SQL語句的載體ResultSet是結(jié)果集對(duì)象1.建立數(shù)據(jù)源這里所建立的數(shù)據(jù)源是指建立ODBC數(shù)據(jù)源,這一點(diǎn)并不是JDBC的要求,而是ODBC所必須的。當(dāng)使用JDBC-ODBC橋接來建立連接時(shí),必須先建立ODBC數(shù)據(jù)源。2.裝入JDBC驅(qū)動(dòng)程序要使用JDBC來訪問數(shù)據(jù)庫,需要加載JDBC驅(qū)動(dòng)程序,代碼語句: Class.forName()對(duì)于JDBC的驅(qū)動(dòng)訪問來說,是Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);對(duì)于JDBC-ODBC橋接來說,則是 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);3.建立連接要連接一個(gè)數(shù)據(jù)庫,必須創(chuàng)建Connection類的一個(gè)實(shí)例,即調(diào)用方法DriverManger.getConnection。與數(shù)據(jù)庫建立連接標(biāo)準(zhǔn)方法是調(diào)用方法: DriverManager.getConnection(Stringurl,Stringuser,Stringpassword); DriverManager.getConnection(Stringurl); 返回值是Connection類的實(shí)例。url標(biāo)準(zhǔn)語法是 jdbc:<subprotocol>:<subname>subprotocol說明了使用哪種JDBC驅(qū)動(dòng)程序,例如:使用JDBC-ODBC,就寫“odbc”,Subname就是數(shù)據(jù)源名。圖2.14“MFCClassWizard”對(duì)話框3.建立連接對(duì)于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類的對(duì)象用createStatement方法創(chuàng)建;SQL語句發(fā)送以后,返回的結(jié)果通常存放在一個(gè)ResultSet類的對(duì)象中,ResultSet可以看作是一個(gè)表,這個(gè)表中包含由SQL返回的列名和相應(yīng)的值,ResultSet對(duì)象中維持了一個(gè)指向當(dāng)前行的指針,通過一系列的getXXX方法,可以檢索當(dāng)前行的各個(gè)列,并顯示出來。5.檢索結(jié)果對(duì)Result對(duì)象進(jìn)行處理之后,才能將查詢結(jié)果顯示給用戶。Result對(duì)象包括一個(gè)由查詢語句返回的一個(gè)表ResultSet,這個(gè)表中包含所有的查詢結(jié)果。對(duì)Result對(duì)象的處理必須逐行進(jìn)行,ResultSet.next方法使指針下移一行。

6.關(guān)閉連接連接在對(duì)象使用完畢后,應(yīng)當(dāng)使用close()方法解除與數(shù)據(jù)庫的連接,并關(guān)閉數(shù)據(jù)庫。例如:con.close();JDBC編程實(shí)例//創(chuàng)建顧客consumer表,此表有三個(gè)字段:顧客編號(hào)id,姓名name,購物總金額totalmoneyimportjava.sql.*;publicclassCreate_Table{publicstaticvoidmain(String[]args){StringJDriver="sun.jdbc.odbc.JdbcOdbcDriver";//聲明jdbc驅(qū)動(dòng)程序類型StringconURL="jdbc:odbc:student";//定義jdbc的url對(duì)象try{Class.forName(JDriver);}//加載jdbc-odbc橋驅(qū)動(dòng)程序catch(java.lang.ClassNotFoundExceptione){System.out.println("forname:"+e.getMessage());}try{Connectioncon=DriverManager.getConnection(conURL);//連接數(shù)據(jù)庫URLStatements=con.createStatement();//建立Statement類對(duì)象 //創(chuàng)建一個(gè)含有三個(gè)字段的顧客表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中插入三個(gè)顧客的紀(jì)錄

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插入三條顧客紀(jì)錄到表中Statements=con.createStatement();Stringr1="insertintoconsumervalues('00001','王明',360)";Stringr2="insertintoconsumervalues('00002','高強(qiáng)',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//修改上例中的第二條和第三條紀(jì)錄的顧客總消費(fèi)金額字段的值,并把數(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論