




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第十五章數(shù)據(jù)庫訪問遼寧機(jī)電職業(yè)技術(shù)學(xué)院信息工程系軟件教研室遲勇回顧補(bǔ)充代碼完成:服務(wù)器端程序:/*建立服務(wù)器端ServerSocket對(duì)象*/serverSocket=newServerSocket(2000);clientSocket=serverSocket.
();//接收來自客戶端的Socketbr=newBufferedReader(newInputStreamReader(
.getInputStream()));System.out.println(“來自客戶端的信息是:”+br.readLine());客戶端程序:SocketclientSocket=newSocket("",
);//建立客戶端的Socket/*建立接收服務(wù)器端信息的輸入流對(duì)象br*/BufferedReaderbr=newBufferedReader(newInputStreamReader(clientSocket.getInputStream()));acceptclientSocket2000本章學(xué)習(xí)任務(wù)掌握J(rèn)DBC操作數(shù)據(jù)庫的語法使用JDBC-ODBC橋訪問數(shù)據(jù)庫使用本地協(xié)議驅(qū)動(dòng)(Type4)方案訪問SQLServer2000、2005、2008~2016數(shù)據(jù)庫使用JDBC4.0操作ApacheDerby本章技能目標(biāo)了解JDBC的作用與地位了解JDBC的分類和使用學(xué)習(xí)使用JDBC-ODBC橋訪問數(shù)據(jù)庫掌握訪問SQLServer和其它類型的數(shù)據(jù)庫的方法掌握J(rèn)DBC4.0操作ApacheDerby數(shù)據(jù)庫的方法預(yù)習(xí)檢查(1)--預(yù)習(xí)新單詞單詞釋義單詞釋義RDBMSSQLJDBCODBCnative預(yù)習(xí)檢查(2)JDBC-ODBCBridge創(chuàng)建數(shù)據(jù)庫連接串的形式JDBCType4驅(qū)動(dòng),操作MSSQLServer2008數(shù)據(jù)庫的連接串形式數(shù)據(jù)庫訪問-內(nèi)容目錄JDBC概述JDBCAPI簡介JDBC操作的基本步驟使用JDBC-ODBCBridge連接數(shù)據(jù)庫示例連接SQLServer數(shù)據(jù)庫示例使用JDBC4.0操作ApacheDerby連接其他類型的數(shù)據(jù)庫15.1JDBC概述JDBC是一組可用于訪問數(shù)據(jù)庫的JavaAPI類庫,它由100%Java純代碼編寫的類和接口組成。從圖15-1可以看出,JDBC的結(jié)構(gòu)分為兩層:JDBCAPI和JDBCDriverAPI,前者負(fù)責(zé)應(yīng)用程序與JDBCDriverManager之間的通信,后者負(fù)責(zé)JDBCDriverManager與數(shù)據(jù)庫驅(qū)動(dòng)程序具體實(shí)現(xiàn)之間的通信。因?yàn)椴煌腄BMS的驅(qū)動(dòng)(Driver)不同,為了保證網(wǎng)絡(luò)上應(yīng)用程序能夠訪問到不同類型的數(shù)據(jù)庫,必須要將來自應(yīng)用程序端的調(diào)用轉(zhuǎn)換成能夠?yàn)椴煌瑪?shù)據(jù)庫所能識(shí)別的驅(qū)動(dòng),JDBC就是“翻譯”。圖15-1JDBC結(jié)構(gòu)圖
應(yīng)用程序1應(yīng)用程序2應(yīng)用程序3JDBC應(yīng)用程序接口(JDBCAPI)JDBC驅(qū)動(dòng)管理器(JDBCDriverManager)數(shù)據(jù)庫驅(qū)動(dòng)(Driver)SQLServerMySQLOracle…………JDBC的作用如前所述,我們總結(jié)一下JDBC的作用有3點(diǎn):1)與數(shù)據(jù)庫建立連接2)向數(shù)據(jù)庫發(fā)送SQL語句3)檢索數(shù)據(jù)庫返回的結(jié)果15.1.2談?wù)凮DBC
MicroSoft的ODBC(開放式數(shù)據(jù)庫連接:OpenDatabaseConnectivity)接口技術(shù)參照SQL標(biāo)準(zhǔn)化組織對(duì)SQL接口的定義而制作ODBC有四個(gè)主要組成部分:應(yīng)用程序接口,驅(qū)動(dòng)器管理器,數(shù)據(jù)庫驅(qū)動(dòng)器和數(shù)據(jù)源。(參考圖15-2ODBC結(jié)構(gòu)圖)其中數(shù)據(jù)源(DataSource)需要在程序運(yùn)行前預(yù)先設(shè)置,它包含了數(shù)據(jù)庫路徑及其驅(qū)動(dòng)兩部分信息(配置方法請(qǐng)參考后面的示例)。圖15-2ODBC結(jié)構(gòu)圖應(yīng)用程序1應(yīng)用程序2應(yīng)用程序3ODBC應(yīng)用程序接口(ODBCAPI)ODBC驅(qū)動(dòng)管理器(ODBCDriverManager)ODBC驅(qū)動(dòng)(ODBCDriver)SQLServerMySQLOracle…………15.1.3JDBC支持的兩種編程模型二層模型(C/S)C/S模型被稱為客戶端(Client)/服務(wù)器(Server)模型,一般稱C/S模型為胖客戶端模型。三層模型(C/S或B/S)三層模型是指將數(shù)據(jù)處理過程分為三部分:第一層是客戶端(用戶界面層),提供用戶與系統(tǒng)的友好訪問;第二層是應(yīng)用服務(wù)層(也叫中間層),專門負(fù)責(zé)業(yè)務(wù)邏輯的實(shí)現(xiàn);第三是數(shù)據(jù)層,負(fù)責(zé)數(shù)據(jù)信息的存儲(chǔ)、訪問及其優(yōu)化。C/S或B/S模型(瀏覽器Browser/服務(wù)器Server模型)都可以使用稱為中間層的服務(wù)層,客戶端的命令首先發(fā)送給一個(gè)所謂“中間層”的業(yè)務(wù)邏輯層,中間層再將SQL語句發(fā)給DMBS處理,執(zhí)行的結(jié)果也同樣再由中間層轉(zhuǎn)交到客戶端,如圖15-3所示。圖15-3三層模型結(jié)構(gòu)圖這樣設(shè)置編程構(gòu)架的結(jié)果是:客戶端不再承受大量的邏輯工作而轉(zhuǎn)由中間層處理,例如B/S模型的Browser是指在客戶端只安裝瀏覽器即可完成用戶的訪問,而所有負(fù)載均安置在服務(wù)器端,所以一般稱B/S模型為瘦客戶端模型三層模型最直接的好處是,將相同的業(yè)務(wù)邏輯(如訪問數(shù)據(jù)庫操作)組合為一個(gè)中間組件,利于組件的重用。當(dāng)然三層模型也是分布式開發(fā)多層模型的基礎(chǔ)??蛻舳薉BMS中間層15.1.4JDBC驅(qū)動(dòng)程序的類型
JDBC針對(duì)不同的應(yīng)用場合,可以采用不同的方案來訪問數(shù)據(jù)庫,例如圖15-1的“數(shù)據(jù)庫Driver層”訪問DBMS時(shí)可以分為兩種情況:使用JDBC-ODBC橋或使用供應(yīng)商提供的JDBC驅(qū)動(dòng),如圖15-4-1所示。Java應(yīng)用程序Java驅(qū)動(dòng)管理器JDBC-ODBC橋ODBC供應(yīng)商提供的JDBC驅(qū)動(dòng)DBMS
(圖15-4-1Java訪問數(shù)據(jù)庫的方案)JDBC驅(qū)動(dòng)程序的類型其中后者又分為3種形式:本地部分Java驅(qū)動(dòng)、網(wǎng)絡(luò)全驅(qū)動(dòng)、本地協(xié)議全驅(qū)動(dòng),如圖15-4-2、如圖15-4-3、如圖15-4-4。
Java應(yīng)用程序DB客戶端運(yùn)行庫數(shù)據(jù)庫中間件服務(wù)器Java應(yīng)用程序數(shù)據(jù)庫訪問中間件數(shù)據(jù)庫Java應(yīng)用程序數(shù)據(jù)庫圖15-4-2本地部分Java驅(qū)動(dòng)圖15-4-2網(wǎng)絡(luò)全驅(qū)動(dòng)圖15-4-2本地協(xié)議全驅(qū)動(dòng)四種JDBC驅(qū)動(dòng)(Driver)的區(qū)別:1)JDBC-ODBC橋(JDBC-ODBCBridge)和ODBCDriver這種方案通過JDBC-ODBC橋接器連接ODBC驅(qū)動(dòng)器提供數(shù)據(jù)庫連接,這要求每一臺(tái)客戶機(jī)都裝有ODBC的驅(qū)動(dòng)器。由于受安裝有ODBC的操作系統(tǒng)的局限,這種方案只適用于Windows機(jī)。使用JDBC-ODBC橋的方式訪問數(shù)據(jù)庫的特點(diǎn)是:配置相對(duì)比較簡單,但安全性和穩(wěn)定性都比較低,基本不具備實(shí)現(xiàn)分布式能力,效率也是四種方案中最低的。
2)本地部分Java驅(qū)動(dòng)(Native-APIpartly-JavaDriver)這種方案將JDBC指令轉(zhuǎn)化成連接所使用的DBMS驅(qū)動(dòng)。各客戶機(jī)使用的數(shù)據(jù)庫可能是Oracle,或是Sybase等,都需要在客戶端上安裝相應(yīng)DBMS的驅(qū)動(dòng)程序庫。四種JDBC驅(qū)動(dòng)(Driver)的區(qū)別:3)網(wǎng)絡(luò)全驅(qū)動(dòng)(JDBC-NetAll-JavaDriver)這種方案將JDBC指令轉(zhuǎn)化成獨(dú)立于DBMS的網(wǎng)絡(luò)協(xié)議形式,再由服務(wù)器轉(zhuǎn)化為特定DBMS的協(xié)議形式。有關(guān)DBMS的協(xié)議由各數(shù)據(jù)庫廠商決定。這種方案可以聯(lián)接到不同的數(shù)據(jù)庫上,最為靈活,但安全性存在一定的問題,另外,作為中間件的驅(qū)動(dòng)還在完善中。、4)本地協(xié)議全驅(qū)動(dòng)(Native-protocolAll-JavaDriver)這種方案將JDBC指令轉(zhuǎn)化成網(wǎng)絡(luò)協(xié)議后不再轉(zhuǎn)換,由DBMS直接使用。相當(dāng)于客戶機(jī)直接與服務(wù)器聯(lián)系,對(duì)局域網(wǎng)適用,訪問效率也最高。在這四種驅(qū)動(dòng)中,后兩類“純Java”(All-Java)的驅(qū)動(dòng)效率更高,也更具有通用性??偨Y(jié)JDBC的優(yōu)、缺點(diǎn)總結(jié)JDBC的優(yōu)點(diǎn)如下:
1)JDBCAPI與ODBC十分相似,利于理解;2)JDBC的出現(xiàn)使得編程人員從復(fù)雜語法調(diào)用中解脫,而致力于應(yīng)用程序中的關(guān)鍵邏輯;標(biāo)準(zhǔn)統(tǒng)一的語法,為編程人員提供了與Java系統(tǒng)的其他部分保持一致的接口;3)100%純Java代碼制作的JDBC使得程序的可移植性大大加強(qiáng);4)JDBCAPI是面向?qū)ο蟮念悗?,利于?gòu)建和維護(hù)大型應(yīng)用工程。缺點(diǎn)如下:1)使用JDBC,訪問數(shù)據(jù)的效率會(huì)受到一定程度的影響;2)因?yàn)橐骖橨ava跨平臺(tái)的因素,JDBC構(gòu)建過程中需要考慮太多不同廠家的產(chǎn)品,這使得一些驅(qū)動(dòng)標(biāo)準(zhǔn)在現(xiàn)階段還不能得到完善。數(shù)據(jù)庫訪問-內(nèi)容目錄JDBC概述JDBCAPI簡介JDBC操作的基本步驟使用JDBC-ODBCBridge連接數(shù)據(jù)庫示例連接SQLServer數(shù)據(jù)庫示例使用JDBC4.0操作ApacheDerby連接其他類型的數(shù)據(jù)庫15.2JDBCAPI簡介JDBCAPI定義了一些完成數(shù)據(jù)庫操作的接口和類,通過這些API,JDBC實(shí)現(xiàn)了三個(gè)基本的功能:建立與數(shù)據(jù)的連接、執(zhí)行SQL語句和處理執(zhí)行結(jié)果。這些接口和類都在Java.sql包中。sql包中的常用接口和類2.sql包中的常用類Java.sql.DriverManager:驅(qū)動(dòng)管理器類,負(fù)責(zé)JDBCDriver的裝載、建立新的數(shù)據(jù)庫連接;Java.sql.SQLException:負(fù)責(zé)處理訪問數(shù)據(jù)庫時(shí)的出錯(cuò)信息;Java.sql.SQLWarning:負(fù)責(zé)處理訪問數(shù)據(jù)庫時(shí)的警告信息。1.sql包中的常用接口java.sql.Driver:數(shù)據(jù)庫驅(qū)動(dòng)類,每個(gè)驅(qū)動(dòng)程序類必須實(shí)現(xiàn)的接口;java.sql.Connection:與數(shù)據(jù)庫的連接;Java.sql.Statement:管理在一個(gè)數(shù)據(jù)庫連接上的靜態(tài)SQL語句的執(zhí)行。包括兩個(gè)子接口:java.sql.PreparedStatement:可保存一個(gè)預(yù)編譯的SQL語句,以提高重復(fù)執(zhí)行的效率;java.sql.CallableStatement:執(zhí)行已存儲(chǔ)的可調(diào)用SQL過程;Java.sql.ResultSet:定義指定SQL語句執(zhí)行的原始結(jié)果集,并提供對(duì)執(zhí)行SQL語句后產(chǎn)生的結(jié)果集的訪問;數(shù)據(jù)庫訪問-內(nèi)容目錄JDBC概述JDBCAPI簡介JDBC操作的基本步驟使用JDBC-ODBCBridge連接數(shù)據(jù)庫示例連接SQLServer數(shù)據(jù)庫示例使用JDBC4.0操作ApacheDerby連接其他類型的數(shù)據(jù)庫
15.3JDBC操作的基本步驟
驅(qū)動(dòng)程序管理器(DriverManager)連接(Connection)驅(qū)動(dòng)程序(Driver)語句(Statement)結(jié)果集(ResultSet)JDBC操作數(shù)據(jù)庫的5個(gè)基本API為:
使用以上API就可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作,詳細(xì)格式如下:JDBC操作的基本步驟1)注冊(cè)驅(qū)動(dòng)DriverManager類是JDBC的管理層,作用于用戶界面程序和驅(qū)動(dòng)程序之間。它跟蹤可用的驅(qū)動(dòng)程序,并在數(shù)據(jù)庫和相應(yīng)驅(qū)動(dòng)程序之間建立連接。DriverManager.registerDriver(driver);例如JDBC-ODBCBridge驅(qū)動(dòng)寫成:Stringdriver=“sun.jdbc.odbc.JdbcOdbcDriver”;注冊(cè)JDBC驅(qū)動(dòng)程序時(shí),DriverManager將從驅(qū)動(dòng)程序列表中讀取指定的驅(qū)動(dòng)并實(shí)例化它們。若要顯示地注冊(cè)并加載某種驅(qū)動(dòng),可以使用Class.forName(),此步驟可以省略。JDBC操作的基本步驟--22)注冊(cè)并加載驅(qū)動(dòng)Class類的forName()方法用于返回指定參數(shù)類的對(duì)象,這里用于加載并實(shí)例化驅(qū)動(dòng)。Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);也可寫成:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).newInstance();使用后一種方法加載驅(qū)動(dòng)時(shí),往往是因?yàn)槌绦蛑行枰褂眠@個(gè)Driver的實(shí)例,如果不需要這個(gè)實(shí)例,使用前一種方法就可以了,因?yàn)樵诋?dāng)前驅(qū)動(dòng)加載時(shí),已經(jīng)實(shí)例化完成。JDBC操作的基本步驟對(duì)于從網(wǎng)絡(luò)下載的驅(qū)動(dòng)類的字符串書寫格式就要視下載包的路徑?jīng)Q定,例如不同數(shù)據(jù)庫的Driver串(以“本地協(xié)議全驅(qū)動(dòng)”為例)格式如下://SQLServerclass.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");//MySQLclass.forName("org.gjt.mm.mysql.Driver");根據(jù)下載包結(jié)構(gòu)不同或?yàn)閏lass.forName("com.mysql.jdbc.Driver");...與步驟1)的DriverManager.registerDriver()方法不同的是,Class.forName()方法只加載并實(shí)例化一種指定的驅(qū)動(dòng)。JDBC操作的基本步驟--33)
建立連接
Connectionconn=DriverManager.getConnection(URL,[login_name],[login_password]);試圖建立到給定數(shù)據(jù)庫URL的連接。它是接口,需由DriverManager類調(diào)用自己靜態(tài)的getConnection()方法得到。建立連接的URL格式建立連接的URL格式為:
jdbc:<subprotocal>:<subname>對(duì)于odbc子協(xié)議,其格式為:jdbc:odbc:<DataSource-name>例如:Stringurl=“jdbc:odbc:mydatasource”;//其中mydatasource為數(shù)據(jù)源名而對(duì)于“全驅(qū)動(dòng)”,其URL格式有所不同,例如,SQLServer的URL格式為:jdbc:microsoft:sqlserver://主機(jī):端口號(hào);DatabaseName=數(shù)據(jù)庫名如下例:Connectionconn
=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=stuDB","sa","123");其中1433為SQLServer的端口號(hào),stuDB為數(shù)據(jù)庫名,"sa"和"123"為SQLServer登錄名和密碼。JDBC操作的基本步驟--44)構(gòu)造語句集Statement對(duì)象負(fù)責(zé)將SQL語句發(fā)送到DBMS。它是接口,其對(duì)象需由Connection對(duì)象調(diào)用createStatement()方法得到。Statementstmt=conn.createStatement( [intresultSetType], [intresultSetConcurrency], [intresultSetHoldability]);其中,參數(shù)resultSetType為鍵集類型,resultSetConcurrency為鍵集并發(fā)性,resultSetHoldability為鍵集可保持能力.如:表15-1createStatement()方法參數(shù)匯總JDBC操作的基本步驟Statement有兩個(gè)子接口Preparedstatement和Callablestatement,如圖15-5。StatementPreparedStatementCallableStatement圖15-5Statement類及其子類createStatement()方法參數(shù)匯總createStatement()方法參數(shù)匯總resultSetType為以下常量之一ResultSet.TYPE_FORWARD_ONLY結(jié)果集記錄指針只能向下移動(dòng)ResultSet.TYPE_SCROLL_INSENSITIVE結(jié)果集記錄指針可以上下移動(dòng),但數(shù)據(jù)庫變化不會(huì)改變當(dāng)前結(jié)果集ResultSet.TYPE_SCROLL_SENSITIVE結(jié)果集記錄指針可以上下移動(dòng),但數(shù)據(jù)庫變化后,當(dāng)前結(jié)果集發(fā)生同步改變r(jià)esultSetConcurrency為以下常量之一ResultSet.CONCUR_READ_ONLY結(jié)果集只讀,不能更新數(shù)據(jù)庫中的數(shù)據(jù)ResultSet.CONCUR_UPDATABLE結(jié)果集可更新,會(huì)影響到數(shù)據(jù)庫中的數(shù)據(jù)resultSetHoldability為以下常量之一ResultSet.HOLD_CURSORS_OVER_COMMIT表示修改提交時(shí),不關(guān)閉ResultSet的游標(biāo)ResultSet.CLOSE_CURSORS_AT_COMMIT表示修改提交時(shí),關(guān)閉ResultSet的游標(biāo)JDBC操作的基本步驟PreparedstatementPreparedstatement實(shí)例中包含了一個(gè)已經(jīng)預(yù)編譯過的SQL語句,因此,要多次執(zhí)行一個(gè)SQL語句,使用PreparedStatement。SQL語句在創(chuàng)建時(shí)提供輸入?yún)?shù),使用pstmt.setXXX()方法來設(shè)置參數(shù),用executeUpdate()方法執(zhí)行SQL語句。例如下面的程序段:
PreparedStatementpStmt=conn.preparedStatement("insertintoemp(empno,ename)values(?,?)"); pStmt.setInt(1,12);//給第一個(gè)位置的參數(shù)設(shè)值為12 pStmt.setString(2,"tom");//給第二個(gè)位置的參數(shù)設(shè)值為"tom" pStmt.executeUpdate();//執(zhí)行SQL語句JDBC操作的基本步驟CallablestatementCallableStatement用于執(zhí)行SQL存儲(chǔ)過程,可以利用存儲(chǔ)過程設(shè)置輸入或輸出參數(shù)。例如,有存儲(chǔ)過程showEmployees(in,out),其中in和out為參數(shù)。
CallableStatementcStmt=conn.prepareCall("{callshowEmployees(?,?)}");JDBC操作的基本步驟--55.
提交SQL語句常用SQL語句介紹:SQL語句大致分為3種:DDL(數(shù)據(jù)定義語言)如CREATE,ALTER,DROP,DECLAREDML(數(shù)據(jù)操縱語言)如SELECT,DELETE,UPDATE,INSERTDCL(數(shù)據(jù)控制語言)如GRANT,REVOKE,COMMIT,ROLLBACK執(zhí)行提交SQL語句的方法:Statement及其子接口支持下列3種方法將SQL語句提交到DBMSexecuteQuery()方法:主要用于SELECT語句,返回值是結(jié)果集,例如:ResultSetrs=stmt.executeQuery("select*fromcustmer");executeUpdate()方法:用來創(chuàng)建和更新表(如:insert,delete,update,create,drop等),返回值是整型值,用以表示被影響的行數(shù),例如:intnum=stmt.executeUpdate("createtableCustmer(CustIdnumber(3),CustNamevarchar2(15)");execute()方法:返回布爾值,用于執(zhí)行任何SQL語句,適用于一次性返回多個(gè)結(jié)果集的情況,例如:booleanb=stmt.execute("……更新一個(gè)字段值,它在多個(gè)表中有關(guān)聯(lián)關(guān)系……");JDBC操作的基本步驟--66.關(guān)閉ResultSet,Statement,Connection對(duì)象
rs.close();
stmt.close();//同時(shí)關(guān)閉了rs
conn.close();需要注意,關(guān)閉Statement對(duì)象的同時(shí)也會(huì)關(guān)閉其當(dāng)前的ResultSet對(duì)象,如果有的話。數(shù)據(jù)庫訪問-內(nèi)容目錄JDBC概述JDBCAPI簡介JDBC操作的基本步驟使用JDBC-ODBCBridge連接數(shù)據(jù)庫示例連接SQLServer數(shù)據(jù)庫示例使用JDBC4.0操作ApacheDerby連接其他類型的數(shù)據(jù)庫
15.4使用JDBC-ODBCBridge連接數(shù)據(jù)庫示例
下面,我們參照15.3節(jié)介紹的步驟,使用最簡單的JDBC-ODBCBridge方式連接Access數(shù)據(jù)庫。假定有Access庫文件為student.mdb,庫中有表stuTable,其設(shè)計(jì)視圖如圖15-6所示:圖15-6student.mdb庫的設(shè)計(jì)視圖圖15-7student.mdb庫的數(shù)據(jù)視圖數(shù)據(jù)視圖如圖15-7所示:使用JDBC-ODBCBridge連接數(shù)據(jù)庫示例1.首先設(shè)置ODBC數(shù)據(jù)源打開“控制面板”,選擇其中的“管理工具”,再打開“數(shù)據(jù)源(ODBC)”,如圖15-8所示。圖15-8使用JDBC-ODBCBridge連接數(shù)據(jù)庫示例選擇“系統(tǒng)DSN”選項(xiàng)卡,單擊“添加”按鈕,在打開的選擇框中選擇“MicrosoftAccessDriver(*.mdb)”驅(qū)動(dòng)如圖15-9所示。在隨后的對(duì)話框中(圖15-10)的“數(shù)據(jù)源名”文本框中輸入“stuDataSource”做為數(shù)據(jù)源名稱,然后單擊“選擇”按鈕,進(jìn)入下一步。圖15-9使用JDBC-ODBCBridge連接數(shù)據(jù)庫示例圖15-10在打開的“選擇數(shù)據(jù)庫”對(duì)話框中選中student.mdb數(shù)據(jù)庫即可,如圖15-11。使用JDBC-ODBCBridge連接數(shù)據(jù)庫示例圖15-12單擊確定完成ODBC數(shù)據(jù)源的配置,如圖15-12所示。圖15-11編寫源代碼importjava.sql.*;//導(dǎo)入sql包publicclassTestJDBC{ publicstaticvoidmain(Stringargs[]) { intid,score; Stringname; Connectioncon;//定義連接對(duì)象
Statementstmt;//定義語句集對(duì)象
ResultSetrs;//定義鍵集對(duì)象
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}//加載驅(qū)動(dòng)
catch(ClassNotFoundExceptione){}try{ con=DriverManager.getConnection("jdbc:odbc:stuDataSource");//創(chuàng)建數(shù)據(jù)庫連接
stmt=con.createStatement();//創(chuàng)建語句集
rs=stmt.executeQuery("select*fromstuTablewherescorelike'%"+args[0]+"%'");//以控制臺(tái)參數(shù)為查詢條件執(zhí)行查詢并返回鍵集
while(rs.next())//判斷鍵集是否有下一條記錄
{ id=rs.getInt("id");//獲取當(dāng)前記錄的第一個(gè)值(即學(xué)號(hào))
name=rs.getString(2); score=rs.getInt("score"); System.out.print("學(xué)生學(xué)號(hào)為:"+id); System.out.print("學(xué)生姓名為:"+name); System.out.print("學(xué)生成績?yōu)椋?+score); System.out.println(""); } }catch(SQLExceptione){}}}【運(yùn)行結(jié)果】在控制臺(tái)中輸入如下命令運(yùn)行:控制臺(tái)提示符>javaTestJDBC9將輸出所有分?jǐn)?shù)中帶字符‘9’的記錄,如圖所示。數(shù)據(jù)庫訪問-內(nèi)容目錄JDBC概述JDBCAPI簡介JDBC操作的基本步驟使用JDBC-ODBCBridge連接數(shù)據(jù)庫示例連接SQLServer數(shù)據(jù)庫示例使用JDBC4.0操作ApacheDerby連接其他類型的數(shù)據(jù)庫15.5連接SQLServer數(shù)據(jù)庫示例1.安裝SQLServer數(shù)據(jù)庫注意事項(xiàng):本小節(jié)我們將學(xué)習(xí)一個(gè)使用Type4驅(qū)動(dòng)類型(Java本地協(xié)議全驅(qū)動(dòng))來操作數(shù)據(jù)庫的例子。因?yàn)槟J(rèn)時(shí)JDBC不支持SQLServer數(shù)據(jù)庫的“Windows認(rèn)證”方式,所以SQLServer的安裝過程中一定要選擇“混合身份驗(yàn)證安裝”。15.5連接SQLServer數(shù)據(jù)庫示例2.數(shù)據(jù)庫驅(qū)動(dòng)的下載:讀者可以從網(wǎng)絡(luò)上microsoft公司的下載頁面中找到SQLServer本地協(xié)議驅(qū)動(dòng)(Type4),或從搜索引擎中得到驅(qū)動(dòng)的下載鏈接。例如:SQLServer2000驅(qū)動(dòng)包括下面三個(gè)文件:msutil.jar、mssqlserver.jar、msbase.jar。JDBC4.0驅(qū)動(dòng)文件為:sqljdbc4.jar。參考微軟官方下載網(wǎng)址:/downloads/,下載最新的驅(qū)動(dòng)。3.配置:將這三個(gè)文件復(fù)制到指定目錄(假設(shè)為D:\JDBCDriver)并配置到classpath環(huán)境變量中,格式如下:.;D:\JDBCDriver\msutil.jar;D:\JDBCDriver\mssqlserver.jar;D:\JDBCDriver\msbase.jar4.兩種連接串形式Connectionconn=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=stuDB","sa","123");或:Connectionconn=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=stuDB?user=sa&password=123");其中sa為數(shù)據(jù)庫登錄用戶名,123為登錄數(shù)據(jù)庫的密碼。15.5連接SQLServer數(shù)據(jù)庫示例5.程序?qū)嵗僭O(shè)有SQLServer數(shù)據(jù)庫stuDB,庫中有學(xué)生數(shù)據(jù)表stuTable(字段同圖15-7)?,F(xiàn)在學(xué)校要為指定的學(xué)生更改成績,使用的SQL語句為:UPDATEstuTableSETscore=score+分?jǐn)?shù)值WHEREid<學(xué)號(hào)范圍andscore<分?jǐn)?shù);考慮到需要更改成績的學(xué)生可能有多個(gè),因此使用PreparedStatement類完成,它可以預(yù)編譯SQL語句,有利于處理速度的提高。代碼如下:15.5連接SQLServer數(shù)據(jù)庫示例importjava.sql.*;publicclassUpdateStuDB{publicstaticvoidmain(String[]args){ Stringurl,user,password; url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=StuDB“; user="sa“;password="123"; try{/*加載數(shù)據(jù)庫驅(qū)動(dòng)*/ Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}
catch(ClassNotFoundExceptionex){ ex.printStackTrace();
}try{ Connectioncon=DriverManager.getConnection(url,user,password); /*SQL語句中的?號(hào)為待輸入?yún)?shù),將由setXXX()方法賦值*/StringstrSQL="UPDATEstuTableSETscore=score+5FROMstuTableWHEREid<?andscore<?"; /*創(chuàng)建PreparedStatement語句集對(duì)象*/PreparedStatementpstmt=con.prepareStatement(strSQL); pstmt.setInt(1,50);//給SQL語句的第一個(gè)參數(shù)賦值
pstmt.setInt(2,90);//給SQL語句的第二個(gè)參數(shù)賦值
intflag=pstmt.executeUpdate();//提交更新操作
if(flag!=0){ System.out.println("數(shù)據(jù)庫更新成功!"); } }catch(SQLExceptionex){}}}【運(yùn)行結(jié)果】數(shù)據(jù)庫更新成功!查看數(shù)據(jù)庫發(fā)現(xiàn),所有分?jǐn)?shù)小于90分的學(xué)生的成績?cè)黾恿?分。數(shù)據(jù)庫訪問-內(nèi)容目錄JDBC概述JDBCAPI簡介JDBC操作的基本步驟使用JDBC-ODBCBridge連接數(shù)據(jù)庫示例連接SQLServer數(shù)據(jù)庫示例使用JDBC4.0操作ApacheDerby連接其他類型的數(shù)據(jù)庫15.6使用JDBC4.0操作ApacheDerby什么是ApacheDerby?DK6新增了一個(gè)名為JavaDB的安裝項(xiàng)目,默認(rèn)安裝在Sun\JavaDB目錄下,它就是ApacheDerby內(nèi)嵌式數(shù)據(jù)庫。JavaDB是JavaSE6的新成員,是一個(gè)純Java實(shí)現(xiàn)、開源的數(shù)據(jù)庫管理系統(tǒng)(DBMS),源于Apache軟件基金會(huì)(ASF)名下的項(xiàng)目Derby。它的完整類庫只有4MB大小??刂婆_(tái)命令行完成Derby數(shù)據(jù)庫操作假定Derby數(shù)據(jù)庫安裝在D:\Java\Sun\JavaDB目錄下,其lib目錄內(nèi)容如下,如圖15-20圖15-20控制臺(tái)命令行完成Derby數(shù)據(jù)庫操作在內(nèi)嵌模式下創(chuàng)建庫及表的步驟如下:首先,在控制臺(tái)中進(jìn)入lib目錄;執(zhí)行:java-jarderbyrun.jarij,就進(jìn)入數(shù)據(jù)庫內(nèi)嵌運(yùn)行模式;然后在ij>下輸入connect'jdbc:derby:StuDB;create=true';創(chuàng)建數(shù)據(jù)表,名稱為stuTable,有三個(gè)字段:createtablestuTable(idint,namevarchar(20),scoreint);插入數(shù)據(jù):insertintostuTablevalues(1,'Tom',99);insertintostuTablevalues(2,'Marry',100);查詢數(shù)據(jù):select*fromstuTable;退出用內(nèi)嵌模式用exit;圖15-20查詢Derby數(shù)據(jù)庫操作的實(shí)例步驟如下:將上面創(chuàng)建的StuDB移動(dòng)到TestDerby.java程序代碼所在的目錄中;將derby.jar類庫配置到classpath環(huán)境變量中編譯后,運(yùn)行。//Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();Connectionconn=DriverManager.getConnection("jdbc:derby:stuDB;user=app;password=app“);Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery(“SELECTid,name,scoreFROMstuTable”);while(rs.next()){...}運(yùn)行結(jié)果使用JDBC4.0操作ApacheDerby數(shù)據(jù)庫:創(chuàng)建與查詢//Class.forName(“org.apache.derby.jdbc.EmbeddedDriver”).newInstance();conn=DriverManager.getConnection("jdbc:derby:stuDB;create=true;user=app;password=app“);conn.setAutoCommit(false);Statementstmt=conn.createStatement();stmt.execute("createtablestuTable(idint,namevarchar(20),scoreint)“);stmt.execute(“insertintostuTablevalues(1,‘Tom’,99)”);stmt.execute(“insertintostuTablevalues(2,‘Marry’,100)”);ResultSetrs=stmt.executeQuery(“SELECTid,name,scoreFROMstuTable”);System.out.println(“id\tname\tscore”);while(rs.next()){StringBuilderbuilder=newStringBuilder(rs.getInt(1)); builder.append(rs.getString(2));... System.out.println(builder.toString());}stmt.execute(“droptableStuTable”);rs.close();stmt.close();mit();conn.close();Derby的網(wǎng)絡(luò)模式模擬一個(gè)在本地機(jī)(localhost)運(yùn)行網(wǎng)絡(luò)模式的實(shí)例步驟如下:1)將derby.jar、derbynet.jar、derbytools.jar、derbyclient.jar類庫配置到classpath環(huán)境變量中,或者從控制臺(tái)直接進(jìn)入Java
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年海洋環(huán)保儀器及采樣設(shè)備項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 音樂酒館運(yùn)營合作協(xié)議
- 移動(dòng)網(wǎng)優(yōu)l1認(rèn)證考試試題及答案
- 薄片公司面試題及答案
- 柔性生產(chǎn)環(huán)境下的倉庫管理計(jì)劃
- 秋季學(xué)期班會(huì)活動(dòng)安排計(jì)劃
- 多媒體行業(yè)保安工作總結(jié)與分析計(jì)劃
- 班級(jí)演講比賽的籌備與執(zhí)行計(jì)劃
- 小班角色游戲?qū)η楦邪l(fā)展的促進(jìn)計(jì)劃
- 人事部門數(shù)字化轉(zhuǎn)型計(jì)劃
- 下肢動(dòng)脈硬化閉塞癥的護(hù)理查房
- 前置胎盤健康宣教
- 醫(yī)院標(biāo)識(shí)工作總結(jié)共4篇
- NSCACSCS美國國家體能協(xié)會(huì)體能教練認(rèn)證指南
- 集裝箱裝柜數(shù)智能計(jì)算表
- 尿流動(dòng)力學(xué)檢查
- 答案-國開電大本科《當(dāng)代中國政治制度》在線形考(形考任務(wù)一)試題
- 綠植租擺服務(wù)投標(biāo)方案(技術(shù)方案)
- 中學(xué)英語Unit1 thinking as a hobby課件
- 《意大利美食文化》課件
- 綠色中國智慧樹知到課后章節(jié)答案2023年下華東理工大學(xué)
評(píng)論
0/150
提交評(píng)論