




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)第第3章章 JAVA 數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程應(yīng)用JDBC鏈接SQL Server 2005數(shù)據(jù)庫(kù)上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)大綱大綱 nJDBC介紹n實(shí)驗(yàn)前的準(zhǔn)備相關(guān)軟件的安裝nJDBC數(shù)據(jù)庫(kù)訪問(wèn)流程n實(shí)驗(yàn)要求上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)3.1 JDBCnJavaJava和和JDBCJDBC有著跨平臺(tái)運(yùn)行的優(yōu)勢(shì)。用有著跨平臺(tái)運(yùn)行的優(yōu)勢(shì)。用JavaJava和和JDBC JDBC (Java Database Connectivity)編寫(xiě)的數(shù)據(jù)庫(kù)程序既可以在編寫(xiě)的數(shù)據(jù)庫(kù)程序既可以在WindowsWindows系列操系列操作系統(tǒng)上計(jì)算機(jī)
2、上運(yùn)行,也可以在作系統(tǒng)上計(jì)算機(jī)上運(yùn)行,也可以在UnixUnix服服務(wù)器上運(yùn)行,還可以在務(wù)器上運(yùn)行,還可以在JavaJava平臺(tái)支持的數(shù)平臺(tái)支持的數(shù)據(jù)庫(kù)設(shè)備上運(yùn)行。據(jù)庫(kù)設(shè)備上運(yùn)行。 nJDBC 是用于執(zhí)行SQL語(yǔ)句的JAVA應(yīng)用程序接口,是一套API集合,在這個(gè)集合中設(shè)置了許多允許JAVA程序連接數(shù)據(jù)庫(kù)的框架。上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)3.1 JDBCJava應(yīng)用程序JDBC驅(qū)動(dòng)程序、管理器廠家提供的JDBC驅(qū)動(dòng)程序JDBC-ODBC橋JDBC驅(qū)動(dòng)程序APIODBC驅(qū)動(dòng)程序數(shù)據(jù)庫(kù)JDBC API負(fù)責(zé)與JDBC管理器驅(qū)動(dòng)程序API進(jìn)行通信,將各個(gè)不同的SQL語(yǔ)句發(fā)送給它。驅(qū)動(dòng)程序管理
3、器API(對(duì)程序員是透明的)與實(shí)際連接到數(shù)據(jù)的各個(gè)第三方驅(qū)動(dòng)程序進(jìn)行通信,并且返回查詢的的信息,或者執(zhí)行由查詢規(guī)定的操作。上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)3.1 JDBCJDBC的主要功能如下:n與一個(gè)數(shù)據(jù)庫(kù)建立連接(connection)。n向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句(statement)。n處理數(shù)據(jù)庫(kù)返回的結(jié)果(resultset)。上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)1、Java應(yīng)用程序應(yīng)用程序nJava程序主要包括Java應(yīng)用程序、java小程序和Servlet,這些類型的程序都可以利用JDBC方法實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)和操作。n主要完成的任務(wù)包括:請(qǐng)求與數(shù)據(jù)庫(kù)建立連接、向數(shù)據(jù)庫(kù)發(fā)
4、送SQL請(qǐng)求、為結(jié)果集定義存儲(chǔ)應(yīng)用和數(shù)據(jù)類型、查詢結(jié)果、處理錯(cuò)誤、控制傳輸、提交、關(guān)閉連接等操作。上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)2、JDBC管理器管理器nJDBC管理器提供了一個(gè)“驅(qū)動(dòng)器管理器”,它能夠動(dòng)態(tài)管理和維護(hù)數(shù)據(jù)庫(kù)查詢所需要的所有驅(qū)動(dòng)程序?qū)ο螅瑢?shí)現(xiàn)Java程序與特定驅(qū)動(dòng)程序的連接,從而體現(xiàn)JDBC與平臺(tái)無(wú)關(guān)的特性。n其主要任務(wù)包括:為特定數(shù)據(jù)庫(kù)選擇驅(qū)動(dòng)程序、處理JDBC的初始化調(diào)用、為每個(gè)驅(qū)動(dòng)程序提供JDBC功能的入口、為JDBC調(diào)用執(zhí)行參數(shù)等。上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)3、驅(qū)動(dòng)程序、驅(qū)動(dòng)程序n驅(qū)動(dòng)程序處理JDBC方法,向特定數(shù)據(jù)庫(kù)發(fā)送SQL請(qǐng)求,并為JAVA程
5、序獲取結(jié)果。nJDBC是獨(dú)立于數(shù)據(jù)庫(kù)管理系統(tǒng)的,每一個(gè)數(shù)據(jù)庫(kù)都有自己的協(xié)議與客戶機(jī)通信, JDBC利用數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序來(lái)使用這些數(shù)據(jù)庫(kù)引擎。nJDBC驅(qū)動(dòng)程序由數(shù)據(jù)庫(kù)和第三方軟件商提供,程序中所使用的數(shù)據(jù)庫(kù)系統(tǒng)不同,所需要的驅(qū)動(dòng)程序也有所不同。n其任務(wù)包括:建立與數(shù)據(jù)庫(kù)的連接、向數(shù)據(jù)庫(kù)發(fā)送請(qǐng)求、翻譯用戶程序請(qǐng)求、將錯(cuò)誤代碼格式化成標(biāo)準(zhǔn)的JDBC錯(cuò)誤代碼上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)JDBC驅(qū)動(dòng)程序類型驅(qū)動(dòng)程序類型n類型一 JDBC-ODBC橋接的JDBC驅(qū)動(dòng)程序n通過(guò)JDBC-ODBC Bridge的轉(zhuǎn)換,將Java程序中使用的JDBC API轉(zhuǎn)換成ODBC API,然后通過(guò)ODBC來(lái)
6、從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)。n類型二 把JDBC API直接映射為數(shù)據(jù)庫(kù)供應(yīng)商提供(并非所有數(shù)據(jù)庫(kù)供應(yīng)商都會(huì)提供,例如ACCESS就不提供)的專用客戶端API的JDBC驅(qū)動(dòng)程序。n通過(guò)JDBC-Native API Bridge的轉(zhuǎn)換,將Java程序中使用的JDBC API轉(zhuǎn)換成Native API,然后從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)。n類型三 支持三層JDBC訪問(wèn)的JDBC驅(qū)動(dòng)程序n類型四 完全使用JAVA編寫(xiě)的JDBC驅(qū)動(dòng)程序,它直接與數(shù)據(jù)庫(kù)實(shí)例對(duì)話。上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)JDBC API 類類類型類型JDBC類類驅(qū)動(dòng)程序管理驅(qū)動(dòng)程序管理Java.sql.Driverjava.sql.Dri
7、verManagerjava.sql.DrivePropertyInfo數(shù)據(jù)庫(kù)連接數(shù)據(jù)庫(kù)連接Java.sql.ConnectionSQL語(yǔ)句語(yǔ)句java.sql.Statementjava.sql.PreparedStatementjava.sql.CallableStatement數(shù)據(jù)數(shù)據(jù)java.sql.ResultSet錯(cuò)誤錯(cuò)誤java.sql.SQLExceptionjava.sql.SQLWarning上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)JDBC 類層次類層次n 驅(qū)動(dòng)程序管理器驅(qū)動(dòng)程序管理器連接連接連接連接連接連接語(yǔ)句語(yǔ)句語(yǔ)句語(yǔ)句可調(diào)用語(yǔ)句可調(diào)用語(yǔ)句準(zhǔn)備語(yǔ)句準(zhǔn)備語(yǔ)句execute
8、Update( )executeQuery( )execute( )getMoreResults( )結(jié)果組結(jié)果組元數(shù)據(jù)元數(shù)據(jù) 數(shù)據(jù)數(shù)據(jù)getResultsSet( )上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)數(shù)據(jù)庫(kù)訪問(wèn)接口數(shù)據(jù)庫(kù)訪問(wèn)接口n目前許多數(shù)據(jù)庫(kù)均支持SQL,對(duì)于由SQL數(shù)據(jù)庫(kù)組成的異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng) ,JDBC和ODBC為訪問(wèn)其異構(gòu)成員提供了統(tǒng)一的方式。圖2.7 “Database Options”對(duì)話框 上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)安裝安裝SQL Server 2005的的JDBC程序程序n安裝SQL Server 2005的JDBC程序n4、安裝后得到3個(gè)jar文件:(C:
9、Program FilesMicrosoft SQL Server 2005 Driver for JDBClib) msutil.jar、msbase.jar、mssqlserver.jar,將他們復(fù)制到j(luò)ava的lib目錄下,如D:jdk1.4libn5、設(shè)置系統(tǒng)classpath環(huán)境變量,把4中三個(gè)文件的路徑添加進(jìn)來(lái)。圖2.9 Ex_ODBC運(yùn)行結(jié)果上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)JDBC數(shù)據(jù)庫(kù)訪問(wèn)流程數(shù)據(jù)庫(kù)訪問(wèn)流程n1. 建立數(shù)據(jù)源(odbc)n2. 裝入JDBC驅(qū)動(dòng)程序n3. 建立連接n4. 執(zhí)行SQL語(yǔ)句n5. 檢索結(jié)果n6. 關(guān)閉連接圖2.8 為控件添加數(shù)據(jù)成員上一頁(yè)上一
10、頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)JDBC數(shù)據(jù)庫(kù)訪問(wèn)流程數(shù)據(jù)庫(kù)訪問(wèn)流程n在Java.sql中有4個(gè)主要的類可以實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)。nDriverManager負(fù)責(zé)加載和處理給定的JDBC驅(qū)動(dòng)程序nConnection表示同一個(gè)特定數(shù)據(jù)庫(kù)進(jìn)行連接的對(duì)象nStatement是SQL語(yǔ)句的載體nResultSet是結(jié)果集對(duì)象上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)1. 建立數(shù)據(jù)源建立數(shù)據(jù)源n這里所建立的數(shù)據(jù)源是指建立ODBC數(shù)據(jù)源,這一點(diǎn)并不是JDBC的要求,而是ODBC所必須的。當(dāng)使用JDBC-ODBC橋接來(lái)建立連接時(shí),必須先建立ODBC數(shù)據(jù)源。上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)2. 裝入裝入JDBC
11、驅(qū)動(dòng)程序驅(qū)動(dòng)程序n要使用JDBC來(lái)訪問(wèn)數(shù)據(jù)庫(kù),需要加載JDBC驅(qū)動(dòng)程序,代碼語(yǔ)句: Class.forName()對(duì)于JDBC的驅(qū)動(dòng)訪問(wèn)來(lái)說(shuō),是 Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);n對(duì)于JDBC-ODBC橋接來(lái)說(shuō),則是Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)3. 建立連接建立連接n要連接一個(gè)數(shù)據(jù)庫(kù),必須創(chuàng)建Connection類的一個(gè)實(shí)例,即調(diào)用方法DriverManger.getConnection。 n與數(shù)據(jù)庫(kù)
12、建立連接標(biāo)準(zhǔn)方法是調(diào)用方法:DriverManager.getConnection(String url, String user, String password);DriverManager.getConnection(String url);返回值是Connection類的實(shí)例。nurl標(biāo)準(zhǔn)語(yǔ)法是jdbc:nsubprotocol說(shuō)明了使用哪種JDBC驅(qū)動(dòng)程序,例如:使用JDBC-ODBC,就寫(xiě)“odbc”,Subname就是數(shù)據(jù)源名。圖2.14 “MFC ClassWizard”對(duì)話框上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)3. 建立連接建立連接n對(duì)于JDBC-ODBC橋接來(lái)講,sub
13、name就是數(shù)據(jù)源名,為了存取數(shù)據(jù),還要提供用戶和口令。String url=“jdbc:odbc:source”;Connection con=DriveManager.getConnection(url,“user”, “password”)Source是事先建立的數(shù)據(jù)源上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)4 4執(zhí)行執(zhí)行SQLSQL語(yǔ)句語(yǔ)句n建立連接后,就能夠向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句了。JDBC提供了Statement類來(lái)發(fā)送SQL語(yǔ)句,Statement類的對(duì)象用createStatement方法創(chuàng)建;SQL語(yǔ)句發(fā)送以后,返回的結(jié)果通常存放在一個(gè)ResultSet類的對(duì)象中,Resul
14、tSet可以看作是一個(gè)表,這個(gè)表中包含由SQL返回的列名和相應(yīng)的值,ResultSet對(duì)象中維持了一個(gè)指向當(dāng)前行的指針,通過(guò)一系列的getXXX方法,可以檢索當(dāng)前行的各個(gè)列,并顯示出來(lái)。 上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)5 5檢索結(jié)果檢索結(jié)果n對(duì)Result對(duì)象進(jìn)行處理之后,才能將查詢結(jié)果顯示給用戶。Result對(duì)象包括一個(gè)由查詢語(yǔ)句返回的一個(gè)表ResultSet,這個(gè)表中包含所有的查詢結(jié)果。對(duì)Result對(duì)象的處理必須逐行進(jìn)行,ResultSet.next方法使指針下移一行。 上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)6 6關(guān)閉連接連接關(guān)閉連接連接n在對(duì)象使用完畢后,應(yīng)當(dāng)使用close
15、( )方法解除與數(shù)據(jù)庫(kù)的連接,并關(guān)閉數(shù)據(jù)庫(kù)。例如:con.close();上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)JDBC編程實(shí)例編程實(shí)例/創(chuàng)建顧客consumer表,此表有三個(gè)字段:顧客編號(hào)id,姓名name,購(gòu)物總金額totalmoneyimport java.sql.*;public class Create_Tablepublic static void main(String args) String JDriver=sun.jdbc.odbc.JdbcOdbcDriver; /聲明jdbc驅(qū)動(dòng)程序類型 String conURL=jdbc:odbc:student; /定義jdbc
16、的url對(duì)象 try Class.forName(JDriver); /加載jdbc-odbc橋驅(qū)動(dòng)程序 catch(java.lang.ClassNotFoundException e) System.out.println(forname:+e.getMessage(); try Connection con=DriverManager.getConnection(conURL);/連接數(shù)據(jù)庫(kù)URL Statement s=con.createStatement(); /建立Statement類對(duì)象 /創(chuàng)建一個(gè)含有三個(gè)字段的顧客表conumser String query=create t
17、able consumer(id char(10),name char(15),totalmoney integer);s.executeUpdate(query); /執(zhí)行SQL語(yǔ)句s.close(); /釋放statement所連接的數(shù)據(jù)庫(kù)及jdbc資源 con.close(); /關(guān)閉與數(shù)據(jù)庫(kù)的連接 catch(SQLException e) System.out.println(SQLException:+e.getMessage(); 上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)示例程序示例程序 Insert_RecordInsert_Record/在上例創(chuàng)建的數(shù)據(jù)表consumer中插
18、入三個(gè)顧客的紀(jì)錄 import java.sql.*;public class Insert_Recordpublic static void main(String args) String JDriver=sun.jdbc.odbc.JdbcOdbcDriver; String conURL=jdbc:odbc:student; try Class.forName(JDriver); catch(java.lang.ClassNotFoundException e) System.out.println(forname:+e.getMessage(); try Connection con
19、=DriverManager.getConnection(conURL); /使用SQL命令insert插入三條顧客紀(jì)錄到表中 Statement s=con.createStatement(); String r1=insert into consumer values(00001,王明,360); String r2=insert into consumer values(00002,高強(qiáng),728); String r3=insert into consumer values(00003,李麗,1182);s.executeUpdate(r1);s.executeUpdate(r2);s.
20、executeUpdate(r3);s.close();con.close(); catch(SQLException e) System.out.println(SQLException:+e.getMessage(); 上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)示例程序示例程序 Update_RecordUpdate_Record/修改上例中的第二條和第三條紀(jì)錄的顧客總消費(fèi)金額字段的值,并把數(shù)據(jù)表的內(nèi)容輸出到屏幕上 import java.sql.*;public class Update_Recordpublic static void main(String args) String J
21、driver=sun.jdbc.odbc.JdbcOdbcDriver; String conURL=jdbc:odbc:TestDB; String id=00002,00003; int totalmoney=989,1260; try Class.forName(Jdriver); catch(java.lang.ClassNotFoundException e) System.out.println(forname:+e.getMessage(); try Connection con=DriverManager.getConnection(conURL); 上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返
22、回首頁(yè)返回首頁(yè)示例程序示例程序 Update_RecordUpdate_Record/修改數(shù)據(jù)庫(kù)中數(shù)據(jù)表的內(nèi)容 PreparedStatement ps=con.prepareStatement(UPDATE consumer set totalmoney=? where id=?); int i=0, idlen=id.length; do ps.setInt(1,totalmoneyi); ps.setString(2,idi); ps.executeUpdate(); +i; while(iid.length); ps.close(); /查詢數(shù)據(jù)庫(kù)并把數(shù)據(jù)表的內(nèi)容輸出到屏幕上 Stat
23、ement s=con.createStatement(); ResultSet rs=s.executeQuery(select * from consumer); 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(); 上一頁(yè)上一頁(yè)下一頁(yè)下一頁(yè)返回首頁(yè)返回首頁(yè)示例程序示例程序 Delete_RecordDelete_Record/在上例創(chuàng)建的數(shù)據(jù)表consumer中刪除第二條記錄,然后把數(shù)據(jù)表的內(nèi)容輸出 import java.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 科研單位年會(huì)通知怎么寫(xiě)及范文
- 物業(yè)外包安全管理體系措施
- 以實(shí)驗(yàn)為翼展高中化學(xué)概念教學(xué)新篇
- 以圖式理論賦能高中英語(yǔ)閱讀教學(xué)的實(shí)證探究
- 班主任畢業(yè)生升學(xué)指導(dǎo)工作計(jì)劃
- 小學(xué)語(yǔ)文教師線上教學(xué)團(tuán)隊(duì)合作的改進(jìn)措施
- 小學(xué)電教教師培訓(xùn)計(jì)劃
- 部編人教版道德與法治一年級(jí)下冊(cè)教學(xué)資源計(jì)劃
- 雨季消防管網(wǎng)施工防護(hù)技術(shù)措施
- 安徽省明光市二中2025屆高二下化學(xué)期末聯(lián)考模擬試題含解析
- Translating China智慧樹(shù)知到答案章節(jié)測(cè)試2023年湖南工業(yè)大學(xué)
- 耳尖放血課件完整版
- 推理小說(shuō)簡(jiǎn)介
- 輸尿管結(jié)石診療指南
- 基坑開(kāi)挖專項(xiàng)施工方案
- 2023年安順市公共資源交易服務(wù)中心事業(yè)單位工作人員招聘筆試題庫(kù)及答案解析
- GB/T 9074.18-2017自攻螺釘和平墊圈組合件
- 變壓器培訓(xùn)資料
- 斷絕子女關(guān)系協(xié)議書(shū)模板(5篇)
- 村規(guī)民約范文大全三篇村規(guī)民約范文大全
- 赤水市轄區(qū)內(nèi)楓溪河(風(fēng)溪河)、寶沅河(寶源河)、丙安河
評(píng)論
0/150
提交評(píng)論