數(shù)據(jù)庫(kù)應(yīng)用技術(shù)系統(tǒng)開(kāi)發(fā)_第1頁(yè)
數(shù)據(jù)庫(kù)應(yīng)用技術(shù)系統(tǒng)開(kāi)發(fā)_第2頁(yè)
數(shù)據(jù)庫(kù)應(yīng)用技術(shù)系統(tǒng)開(kāi)發(fā)_第3頁(yè)
數(shù)據(jù)庫(kù)應(yīng)用技術(shù)系統(tǒng)開(kāi)發(fā)_第4頁(yè)
數(shù)據(jù)庫(kù)應(yīng)用技術(shù)系統(tǒng)開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第12章數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)學(xué)習(xí)目標(biāo):了解數(shù)據(jù)庫(kù)訪問(wèn)接口相關(guān)概念。了解JSP基本知識(shí)。掌握J(rèn)SP訪問(wèn)Oracle數(shù)據(jù)庫(kù)的方法。掌握基于JSP的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)的思路和方法。一個(gè)完整的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)在邏輯上包括用戶(hù)界面和數(shù)據(jù)庫(kù)訪問(wèn)鏈路。Oracle不具備圖形用戶(hù)界面的設(shè)計(jì)功能,一般把它作為整個(gè)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的后端數(shù)據(jù)庫(kù),滿足客戶(hù)端連接數(shù)據(jù)庫(kù)和存儲(chǔ)數(shù)據(jù)的需要。圖形用戶(hù)界面的設(shè)計(jì)工作通常使用可視化開(kāi)發(fā)工具來(lái)完成,如VisualStudio2005、Java、JSP等。本章將以JSP作為開(kāi)發(fā)工具,介紹開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的方法。12.1數(shù)據(jù)庫(kù)訪問(wèn)接口ODBC開(kāi)放式數(shù)據(jù)庫(kù)互聯(lián)(OpenedDatabase

2、Connectivity,ODBC)是一種用于訪問(wèn)數(shù)據(jù)庫(kù)的統(tǒng)一界面標(biāo)準(zhǔn),由Microsoft公司于1991年底發(fā)布,它應(yīng)用數(shù)據(jù)通信方法、數(shù)據(jù)傳輸協(xié)議、DBMS等多種技術(shù)定義了一個(gè)標(biāo)準(zhǔn)的接口協(xié)議,允許應(yīng)用程序以SQL作為數(shù)據(jù)存取標(biāo)準(zhǔn),來(lái)存取不同的DBMS管理的數(shù)據(jù)。ODBC是基于SQL語(yǔ)言的,是一種在SQL和應(yīng)用界面之間的標(biāo)準(zhǔn)接口,它解決了嵌入式SQL接口非規(guī)范核心問(wèn)題,免除了應(yīng)用軟件隨數(shù)據(jù)庫(kù)的改變而改變的麻煩。ODBC組成ODBC是一個(gè)分層體系結(jié)構(gòu),由四部分構(gòu)成:ODBC數(shù)據(jù)庫(kù)應(yīng)用程序(Application)、驅(qū)動(dòng)程序管理器(DriverManager)、DBMS驅(qū)動(dòng)程序(DBMSDrive

3、r)、數(shù)據(jù)源(DataSource)。應(yīng)用程序應(yīng)用程序利用ODBC接口中的ODBC功能與數(shù)據(jù)庫(kù)進(jìn)行操作,其主要功能有:調(diào)用ODBC函數(shù),遞交SQL語(yǔ)句給DBMS,檢索出結(jié)果,并進(jìn)行處理。應(yīng)用程序要完成ODBC外部接口的所有工作。驅(qū)動(dòng)程序管理器驅(qū)動(dòng)程序管理器是一個(gè)動(dòng)態(tài)連接庫(kù)(DLL),用于連接各種DBS的DBMS驅(qū)動(dòng)程序(如SQLServer、Oracle、Sybase等驅(qū)動(dòng)程序),管理應(yīng)用程序和DBMS驅(qū)動(dòng)程序之間的交互作用。當(dāng)一個(gè)應(yīng)用程序與多個(gè)數(shù)據(jù)庫(kù)連接時(shí),驅(qū)動(dòng)程序管理器能夠保證應(yīng)用程序正確地調(diào)用這些DBS的DBMS,實(shí)現(xiàn)數(shù)據(jù)訪問(wèn),并把來(lái)自數(shù)據(jù)源的數(shù)據(jù)傳送給應(yīng)用程序。DBMS驅(qū)動(dòng)程序應(yīng)用程序

4、不能直接存取數(shù)據(jù)庫(kù),其各種操作請(qǐng)求要通過(guò)ODBC的驅(qū)動(dòng)程序管理器提交給DBMS驅(qū)動(dòng)程序,通過(guò)驅(qū)動(dòng)程序?qū)崿F(xiàn)對(duì)數(shù)據(jù)源的各種操作,數(shù)據(jù)庫(kù)的操作結(jié)果也通過(guò)驅(qū)動(dòng)程序返回給應(yīng)用程序。應(yīng)用程序通過(guò)調(diào)用驅(qū)動(dòng)程序所支持的函數(shù)來(lái)操縱數(shù)據(jù)庫(kù)。驅(qū)動(dòng)程序也是一個(gè)動(dòng)態(tài)連接庫(kù)(DLL)。ODBC的數(shù)據(jù)源數(shù)據(jù)源(DataSourceName,簡(jiǎn)稱(chēng)DSN)是驅(qū)動(dòng)程序與DBS連接的橋梁,數(shù)據(jù)源不是DBS,而是用于表達(dá)一個(gè)ODBC驅(qū)動(dòng)程序和DBMS特殊連接的命名。數(shù)據(jù)源分為以下三類(lèi):用戶(hù)數(shù)據(jù)源:用戶(hù)創(chuàng)建的數(shù)據(jù)源,稱(chēng)為“用戶(hù)數(shù)據(jù)源”。此時(shí)只有創(chuàng)建者才能使用,并且只能在所定義的機(jī)器上運(yùn)行。任何用戶(hù)都不能使用其他用戶(hù)創(chuàng)建的用戶(hù)數(shù)據(jù)源。系

5、統(tǒng)數(shù)據(jù)源:所有用戶(hù)和在WindowsNT下以服務(wù)方式運(yùn)行的應(yīng)用程序均可使用系統(tǒng)數(shù)據(jù)源。文件數(shù)據(jù)源:文件數(shù)據(jù)源是ODBC3.0以上版本增加的一種數(shù)據(jù)源,可用于企業(yè)用戶(hù),ODBC驅(qū)動(dòng)程序也安裝在用戶(hù)的計(jì)算機(jī)上。創(chuàng)建數(shù)據(jù)源最簡(jiǎn)單的方法是使用ODBC驅(qū)動(dòng)程序管理器。在連接中,用數(shù)據(jù)源名來(lái)代表用戶(hù)名、服務(wù)器名、所連接的數(shù)據(jù)庫(kù)名等,可以將數(shù)據(jù)源名看成是與一個(gè)具體數(shù)據(jù)庫(kù)建立的連接。JDBCJDBC是Java數(shù)據(jù)庫(kù)連接(JavaDataBaseConnectivity)技術(shù)的簡(jiǎn)稱(chēng),是Java同許多數(shù)據(jù)庫(kù)之間連接的一種標(biāo)準(zhǔn),這種連接獨(dú)立于數(shù)據(jù)庫(kù)。它是由Sun定義了技術(shù)規(guī)范,并由Sun及其Java合作伙伴開(kāi)發(fā)的與

6、平臺(tái)無(wú)關(guān)的標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)訪問(wèn)接口。JDBC主要由兩部分組成:一部分是由數(shù)據(jù)庫(kù)廠商提供的使Java程序能夠與數(shù)據(jù)庫(kù)連接通信的驅(qū)動(dòng)程序,即JDBC數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序;另一部分是訪問(wèn)數(shù)據(jù)庫(kù)的高層接口,即通常所說(shuō)的JDBCAPI。JDBC數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序JDBC驅(qū)動(dòng)程序可以分為以下四類(lèi):JDBC-ODBC橋加ODBC驅(qū)動(dòng)程序:該類(lèi)驅(qū)動(dòng)程序?yàn)镴ava應(yīng)用程序提供了一種把JDBC調(diào)用映射為ODBC調(diào)用的方法。這種類(lèi)型的驅(qū)動(dòng)使Java應(yīng)用可以訪問(wèn)所有支持ODBC的DBMS。部分用Java來(lái)編寫(xiě)的本地API驅(qū)動(dòng)程序:該類(lèi)驅(qū)動(dòng)程序把客戶(hù)機(jī)API上的JDBC調(diào)用轉(zhuǎn)換為對(duì)特定的數(shù)據(jù)庫(kù)如Oracle、SybaseDB2等或其它

7、DBMS的調(diào)用。JDBC網(wǎng)絡(luò)純Java驅(qū)動(dòng)程序:該類(lèi)驅(qū)動(dòng)程序?qū)DBC調(diào)用轉(zhuǎn)換為與DBMS無(wú)關(guān)的網(wǎng)絡(luò)協(xié)議。本地協(xié)議純Java驅(qū)動(dòng)程序:該類(lèi)驅(qū)動(dòng)程序?qū)DBC調(diào)用直接轉(zhuǎn)換為DBMS所使用的網(wǎng)絡(luò)協(xié)議。這將允許從客戶(hù)機(jī)上直接調(diào)用DBMS服務(wù)器。JDBCAPIJDBC定義了表示數(shù)據(jù)庫(kù)連接、SQL句柄、預(yù)編譯的SQL句柄、執(zhí)行存儲(chǔ)過(guò)程的SQL句柄、記錄集、記錄集元數(shù)據(jù)和數(shù)據(jù)庫(kù)元數(shù)據(jù)的Java接口。這些接口提供了標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)訪問(wèn)功能。下面介紹JDBC中DriverManager、Connection、Statement、PrepareStatementCallableStatement和ResultSet

8、的使用。DriverManagerDriverManager是用于管理JDBC驅(qū)動(dòng)程序的接口。這個(gè)接口的主要用途是通過(guò)getConnection方法來(lái)取得Connection對(duì)象引用。常用方法如下:publicstaticsynchronizedConnection(Stringurl,Stringuser,Stringpwd)throwsSQLException:該方法獲得url對(duì)應(yīng)數(shù)據(jù)庫(kù)的一個(gè)連接。publicstaticvoidsetLoginTimeout(intseconds):該方法用于設(shè)置要進(jìn)行數(shù)據(jù)庫(kù)登錄時(shí)驅(qū)動(dòng)程序等待的遲延時(shí)間。ConnectionConnection對(duì)象是通過(guò)

9、DriverManager.getConnection()取得的,表示驅(qū)動(dòng)程序提供的與數(shù)據(jù)庫(kù)連接的對(duì)話。常用方法如下:StatetementcreateStatement()throwsSQLException:該方法返回一個(gè)Statetement對(duì)象。CallableStatementprepareCall(Stringsql):該方法返回一個(gè)CallableStatement對(duì)象,該對(duì)象能夠調(diào)用存儲(chǔ)過(guò)程。PrepareStatementprepareStatement(Stringsql)throwsSQLException:該方法返回一個(gè)PrepareStatement對(duì)象,并能把SQL

10、語(yǔ)句提交刀數(shù)據(jù)庫(kù)進(jìn)行預(yù)編譯。voidsetAutoCommit(BooleanautoCommit)throwsSQLException:該方法用于設(shè)置事務(wù)提交的模式。voidcommit()throwsSQLException:該方法作用是進(jìn)行當(dāng)前業(yè)務(wù)開(kāi)始以來(lái)的所有改變。voidrollback()throwsSQLException:該方法作用是放棄當(dāng)前業(yè)務(wù)開(kāi)始以來(lái)的所有改變。StatementStatement是向數(shù)據(jù)庫(kù)提交SQL語(yǔ)句并返回相應(yīng)結(jié)果的工具。語(yǔ)句可以是SQL查詢(xún)、修改或插入。常用方法如下:ResultSetexecuterQuery(Stringsql)throwsSQLE

11、xception:用于執(zhí)行一個(gè)查詢(xún)語(yǔ)句并將返回結(jié)果集于ResultSet對(duì)象中。intexecuteUpdate(Stringsql)throwsSQLException:用于執(zhí)行一個(gè)修改或查詢(xún)語(yǔ)句,并返回發(fā)生改變的記錄條數(shù)。Booleanexecute(Stringsql)throwsSQLException:用于執(zhí)行一個(gè)修改或插入語(yǔ)句,返回的布爾值表示語(yǔ)句是否執(zhí)行成功。使用Statement方法時(shí),語(yǔ)句可能返回或不返回ResultSet對(duì)象。如果提交的時(shí)查詢(xún)語(yǔ)句(select),通常使用executerQuery(Stringsql);如果提交的是修改或插入語(yǔ)句(update,delete

12、,insert),通常使用executeUpdate(Stringsql)。PrepareStatementPrepareStatement接口繼承Statement接口。當(dāng)一條SQL語(yǔ)句需要稍加變化而反復(fù)執(zhí)行時(shí),通常使用PrepareStatement,女口:PrepareStatementpstmt=conn.PrepareStatement“hsertintostockvalues(?,?,?)”;While(rs.next()/rs為向數(shù)據(jù)庫(kù)提交查詢(xún)語(yǔ)句返回的結(jié)果集pstmt.setString(1,rs.getString(Stockid”);pstmt.setString(2,rs

13、.getString(StockName”);pstmt.setString(3,rs.getString(stockNum”);pstmt.executeQuery();CallableStatementCallableStatement繼承PrepareStatement接口,用于執(zhí)行存儲(chǔ)過(guò)程。例如:CallableStatementstmt=conn.prepareCall(callMyProcedure(?,?,?)”stmt.setInt(1,77);stmt.String(2,Ruby”;stmt.setInt(3,45);stmt.executeUpdate();存儲(chǔ)過(guò)程MyPr

14、ocedure的SQL語(yǔ)句腳本如下:createorreplaceprocedureMyProcedure(sninnumber,nameinchar,ageinchar)asbegininsertintodeptvalues(sn,name,age);end;ResultSetResultSet接口定義訪問(wèn)執(zhí)行Statement產(chǎn)生的結(jié)果集的方法。ResultSet結(jié)果集可以按照名稱(chēng)或列名(從1到n)訪問(wèn)。其常用的方法如下:Booleannext()throwsSQLException:將ResultSet定位到下一行。ResultSet定位從結(jié)果集第一行開(kāi)始。ResultSetMetaDa

15、tagetMetaData()throwsSQLException:返回包含當(dāng)前結(jié)果集說(shuō)明的對(duì)象:列號(hào)、每列類(lèi)型和結(jié)果屬性。voidclose()throwsSQLException:釋放ResultSet對(duì)象資源。Booleanabsolute(introw)throwsSQLException:將結(jié)果集移動(dòng)到指定行,如果row為負(fù)數(shù),則放在倒數(shù)第幾行。12.2使用JSP開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序JSP(JavaServerPages是一門(mén)熱門(mén)的網(wǎng)絡(luò)編程語(yǔ)言,適合編寫(xiě)目前流行的三層架構(gòu)應(yīng)用程序(數(shù)據(jù)訪問(wèn)層、業(yè)務(wù)邏輯層、頁(yè)面表示層)。JSP是在傳統(tǒng)的靜態(tài)頁(yè)面文件(*.html,*.htm)中加入Jav

16、a程序片斷和JSP標(biāo)記,構(gòu)成JSP頁(yè)面。在JSP中,可以使用JavaBean封裝頁(yè)面中的表現(xiàn)邏輯或初步的業(yè)務(wù)邏輯,實(shí)現(xiàn)一些比較復(fù)雜的事務(wù)處理。簡(jiǎn)介Java是由Sun公司開(kāi)發(fā)出來(lái)的。它的誕生主要源于家用電器的芯片。隨著WWW的發(fā)展,Java語(yǔ)言得到了快速的發(fā)展,成為網(wǎng)絡(luò)上流行的開(kāi)發(fā)語(yǔ)言之一。Java語(yǔ)言是面向?qū)ο缶幊陶Z(yǔ)言,也是跨平臺(tái)的語(yǔ)言,它具有簡(jiǎn)單、可移植性、面向?qū)ο蟆⒔忉屝?、分布式、高性能、健壯性、多線程、安全、動(dòng)態(tài)及體系結(jié)構(gòu)等一系列優(yōu)點(diǎn)。簡(jiǎn)單:Java語(yǔ)言的風(fēng)格類(lèi)似于C+語(yǔ)言,但要比C+簡(jiǎn)單。它舍棄了C+中一些不常使用、難于理解、易于混淆的特性。面向?qū)ο螅河肑ava語(yǔ)言編程的任何程序都具有

17、面向?qū)ο蟮奶攸c(diǎn),利用類(lèi)和對(duì)象的機(jī)制將數(shù)據(jù)及其操作封裝在一起,通過(guò)統(tǒng)一的接口與外界交互。分布式:Java語(yǔ)言的類(lèi)庫(kù)提供用HTTP和FTP傳送信息的方法,Java程序能夠通過(guò)URL很方便地打開(kāi)和訪問(wèn)網(wǎng)絡(luò)上的資源,其便利程度如同訪問(wèn)本地文件一樣。解釋型和高性能:Java是解釋型的語(yǔ)言,編譯后生成可以在Java虛擬機(jī)(JVM)系統(tǒng)上被解釋執(zhí)行的字節(jié)碼。由于解釋型語(yǔ)言的執(zhí)行速度比編譯型語(yǔ)言要慢,Java提供了即時(shí)編譯(JIT)方法,它可以一次把字節(jié)碼編譯為本地代碼,緩存得到的結(jié)果,在需要的時(shí)候重新調(diào)用,從而使Java的運(yùn)行速度接近于普通的編譯型語(yǔ)言。健壯性:Java自己進(jìn)行內(nèi)存管理從而減少了內(nèi)存出錯(cuò)的可

18、能性,它提供的自動(dòng)垃圾收集防止了編程人員在管理內(nèi)存時(shí)容易產(chǎn)生的錯(cuò)誤。Java提供了異常處理機(jī)制,在編譯時(shí),Java將提示可能出現(xiàn)但未被處理的異常,幫助編程人員正確地進(jìn)行選擇以防止系統(tǒng)的崩潰。另外,類(lèi)型檢查可以幫助編程人員檢查出許多開(kāi)發(fā)早期出現(xiàn)的問(wèn)題。安全:Java可以通過(guò)自己的安全機(jī)制防止了病毒程序的產(chǎn)生和下載程序?qū)Ρ镜叵到y(tǒng)的威脅破壞。另外,Java安全機(jī)制禁止Java程序進(jìn)行一些操作:如禁止運(yùn)行時(shí)堆棧溢出、禁止在自己的處理空間外破壞內(nèi)存等。體系結(jié)構(gòu)中立:Java程序設(shè)計(jì)者的目標(biāo)是“一次編寫(xiě),處處運(yùn)行”。Java編譯器通過(guò)生成與特定計(jì)算機(jī)體系結(jié)構(gòu)無(wú)關(guān)的字節(jié)碼指令來(lái)實(shí)現(xiàn)這個(gè)目標(biāo)。而且字節(jié)碼文件既

19、可以容易地在當(dāng)今大多數(shù)通用計(jì)算機(jī)體系結(jié)構(gòu)上解釋執(zhí)行,也能夠在運(yùn)行時(shí)很容易地被翻譯成本地機(jī)器代碼。可移植性:結(jié)構(gòu)中立構(gòu)成了程序可移植性的基礎(chǔ)。Java語(yǔ)言的基本數(shù)據(jù)類(lèi)型長(zhǎng)度采取了固定長(zhǎng)度消除了代碼移植時(shí)讓人頭疼的主要問(wèn)題。另外,Java的類(lèi)庫(kù)提供了可移植性的接口。多線程:Java提供了一套復(fù)雜地線程同步化機(jī)制,使得編程人員可以很方便地使用這種機(jī)制設(shè)計(jì)的方法,編寫(xiě)出健壯的多線程程序。動(dòng)態(tài):Java的動(dòng)態(tài)性使得它能夠適應(yīng)發(fā)展的環(huán)境。Java的類(lèi)庫(kù)可以隨意地增加新的方法及實(shí)例變量,而客戶(hù)端可以不做任何更改。Javabean簡(jiǎn)介JavaBean是JavaSoft公司開(kāi)發(fā)的技術(shù)組件,實(shí)現(xiàn)了“Wrireon

20、ce,runanywhere,reuseeverywhere”,即一次編譯,處處運(yùn)行,具有“一次編寫(xiě),可以在任何地方執(zhí)行,可以在任何地方重用的”特性。Javabean支持可視化和非可視化兩種組件??梢暬慕M件在運(yùn)行中能夠顯示出來(lái),像按鈕、文本框等,都能在程序中顯示出來(lái);非可視化組件通常用來(lái)處理程序中的一些復(fù)雜事務(wù),一般不會(huì)有可視化輸出。雖然平時(shí)使用的JavaBean以可視化的居多,但非可視化的JavaBean也有她的優(yōu)點(diǎn),特別是jsp,它只支持非可視化的JavaBean,來(lái)實(shí)現(xiàn)一些比較復(fù)雜的事務(wù)處理。Javabean與JSP結(jié)合在JSP中,可以使用javabean封裝頁(yè)面中的表現(xiàn)邏輯或初步的業(yè)

21、務(wù)邏輯。在JSP中使用javabean需要用到j(luò)avabean動(dòng)作,一般語(yǔ)法格式如下:Jsp:useBean動(dòng)作相當(dāng)于在當(dāng)前jsp頁(yè)面中創(chuàng)建了package.class的一個(gè)對(duì)象。創(chuàng)建javaBean對(duì)象后,可以通過(guò)jsp:setProperty動(dòng)作設(shè)置javabean的值;其語(yǔ)法格式如下:;另外,也可以通過(guò)jsp:getProperty動(dòng)作讀取JavaBean中的值,其語(yǔ)法格式如下:12.3案例的客戶(hù)端程序通過(guò)前面的學(xué)習(xí),我們已經(jīng)掌握了使用jsp連接數(shù)據(jù)庫(kù)的方法。本節(jié)我們以實(shí)際的“學(xué)生成績(jī)管理信息系統(tǒng)為例,采用面向?qū)ο蟮姆治龇椒?,使用JSP作為前端開(kāi)發(fā)工具,Oracle作為后臺(tái)數(shù)據(jù)庫(kù)服務(wù)器來(lái)

22、學(xué)習(xí)應(yīng)用程序開(kāi)發(fā)方法。系統(tǒng)分析與設(shè)計(jì)系統(tǒng)需求學(xué)校每個(gè)學(xué)期都會(huì)為學(xué)生提供選修課,如何更加便捷的對(duì)選修課實(shí)行有效的管理,幫助學(xué)校、教師、學(xué)生方便的掌握學(xué)生學(xué)習(xí)情況,這就是“學(xué)生選課管理系統(tǒng)”需要完成的功能。本系統(tǒng)主要功能就是幫助收集學(xué)生的選修課信息,主要功能有:學(xué)生管理、教師管理、課程管理、成績(jī)錄入、成績(jī)查詢(xún)。分析問(wèn)題領(lǐng)域確定系統(tǒng)范圍和系統(tǒng)邊界。“學(xué)生選課管理系統(tǒng)”涉及學(xué)生、教師、課程和成績(jī)等數(shù)據(jù)的管理。3個(gè)活動(dòng)者:學(xué)生、教師、管理定義活動(dòng)者。根據(jù)系統(tǒng)的職責(zé)范圍和需求,確定系統(tǒng)中的員。對(duì)于每一個(gè)活動(dòng)者,明確其業(yè)務(wù)活動(dòng)的內(nèi)容如下:“學(xué)生”使用該系統(tǒng)查詢(xún)新學(xué)期開(kāi)設(shè)的課程信息和教師開(kāi)課信息,進(jìn)行選課,查

23、詢(xún)自己的課程成績(jī)信息。“教師”使用系統(tǒng)查詢(xún)新學(xué)期開(kāi)設(shè)的課程信息、學(xué)生選課信息、錄入和查詢(xún)學(xué)生成績(jī)信息?!肮芾韱T”負(fù)責(zé)錄入教師、學(xué)生、課程等數(shù)據(jù),并進(jìn)行維護(hù)、統(tǒng)計(jì)、查詢(xún)和生成數(shù)據(jù)報(bào)定義UseCase(用例圖),UseCase是活動(dòng)者與系統(tǒng)在交互中執(zhí)行的有關(guān)事物序列。根據(jù)系統(tǒng)需求,學(xué)生選課管理系統(tǒng)的UseCase圖如圖12.1所示。cxLcnd&u-czVMIAVMIA人員*珂”、圖12.2選課注冊(cè)順序圖:0)return刪除成功!;elsereturn刪除失?。?publicStringupdate(StringstuName,Stringgender,Stringbirthday,String

24、ruxue,Stringjiguan,Stringstuid)DALld=newDAL();inti=ld.updateStudent(stuName,gender,birthday,ruxue,jiguan,stuid);if(i0)return修改成功!;elsereturn修改失?。?publicResultSettiaojianSelect(Stringxb,Stringbj)DALld=newDAL();returnld.bjSelect(xb,bj);publicResultSetselectStudent(Stringxb,Stringbj)DALld=newDAL();retu

25、rnld.selectStudent(xb,bj);publicResultSetselectNo(Stringxb,Stringbj)DALld=newDAL();returnld.select(xb,bj);publicResultSetselectxb()DALld=newDAL();returnld.selectxb();publicResultSetselectbj(Stringxb)DALld=newDAL();returnld.selectbj(xb);publicStringInsertStudent(StringstuName,Stringgender,Stringbirth

26、day,Stringruxue,Stringjiguan,Stringstuid,Stringbanji)DALld=newDAL();inti=ld.InsertStudent(stuName,gender,birthday,ruxue,jiguan,stuid,banji);if(i0)return添加成功!;elsereturn添加失?。?publicResultSetSelect_score(Stringxb,Stringbj)DALld=newDAL();returnld.Select_score(xb,bj);表示層部分頁(yè)面(1)登錄頁(yè)面該頁(yè)面是系統(tǒng)的第一個(gè)頁(yè)面,主要用于用戶(hù)身份的

27、認(rèn)證,其界面如圖12.6所示。圖1.6登錄頁(yè)面登錄頁(yè)面客戶(hù)端代碼如下:VDOCTYPEhtmlPUBLIC-/W3C/DTDXHTML1.0Transitional/ENnsitional.dtdfunctioncheck()if(document.myform.userName.value=”)alert(請(qǐng)輸入姓名!”);return;elseif(document.myform.pwd.value=”)alert(請(qǐng)輸入密碼!);return;document.myform.submit();用戶(hù)登錄用戶(hù)登錄用戶(hù)名:密碼:用戶(hù):管理員學(xué)生教師登錄頁(yè)面的處理頁(yè)面代碼如下:VDOCTYPEh

28、tmlPUBLIC-/W3C/DTDXHTML1.0Transitional/ENnsitional.dtd無(wú)標(biāo)題文檔(2)管理員管理頁(yè)面在用戶(hù)登錄成功后,顯示主頁(yè)面。主頁(yè)面根據(jù)用戶(hù)角色顯示不同功能,例如:如果為學(xué)生登錄,則只顯示“學(xué)生”可以操作的頁(yè)面;如果為教師登錄,則只顯示“教師”可以操作的頁(yè)面;如為“管理員”,則顯示管理員可操作的頁(yè)面,圖12.7為“管理員”登錄后的頁(yè)面。無(wú)女禹la-craxof-tLnttuikaplnrac空n密m:吵收injimqp0-回確劊戶(hù)W辱臥謝a-Mtit衛(wèi)jfl甘旺:力*jcilXxiJMaJma/rTf町EBB辛蟲(chóng)砥理埠怪音腔栽帕迎蟻半廿圳云運(yùn)辰祗理訃玄

29、洞學(xué)生巡里圖1.7管理員管理頁(yè)面頁(yè)面代碼如下:VDOCTYPEhtmlPUBLIC-/W3C/DTDXHTML1.0Transitional/ENnsitional.dtd無(wú)標(biāo)題文檔學(xué)生管理課程管理教師管理教學(xué)計(jì)劃管理成績(jī)管理成績(jī)查詢(xún)學(xué)生選課成績(jī)管理績(jī)查詢(xún)學(xué)生選課成績(jī)查詢(xún)(3)學(xué)生基本信息管理頁(yè)面管理員選擇“學(xué)生管理”功能,顯示“學(xué)生基本信息管理”頁(yè)面,如圖12.8所示。使用該頁(yè)面實(shí)現(xiàn)學(xué)生基本信息的查詢(xún)、添加和刪除。圖1.8學(xué)生基本信息管理頁(yè)面代碼如下:VDOCTYPEhtmlPUBLIC-/W3C/DTDXHTML1.0Transitional/ENnsitional.dtdfunction

30、mysubmit(flag)if(document.myform.operflag!=null)if(document.myform.operflag.value!=null)document.myform.operflag.value=flag;document.myform.submit();學(xué)生基本信息管理學(xué)生基本信息管理vformmethod=postaction=stu_info.jspname=myform系名:%tryrs1=bll.selectxb();while(rs1.next()Stringtxb=rs1.getString(”系部名稱(chēng)”);if(xb=null|xb.e

31、quals()xb=txb;if(xb!=null&xb.equals(txb)out.print(+txb+);elseout.print(+txb+);%班級(jí):%rs1.close();rs=bll.selectbj(xb);while(rs.next()Stringtbj=rs.getString(”班級(jí)名稱(chēng));Stringtbj仁rs.getString(”班級(jí)代碼);tryif(oper_flag!=null)if(oper_flag!=null|oper_flag.equals(1)bj=tbj;oper_flag=2;elseoper_flag=1;catch(Exception

32、e1)out.print();out.print(e1.toString();rs.close();return;if(bj=null|bj.equals()bj=tbj;if(bj.equals(tbj1)out.print(+tbj+);elseout.print(+tbj+);%學(xué)號(hào)姓名性別出生日期入學(xué)時(shí)間籍貫刪除更新inputtype=hiddenname=stuidvalue=/姓名)%size=8inputname=stuNametype=textvalue=inputname=gendertype=textvalue=size=2maxlength=2/inputname=bir

33、thdaytype=textvalue=size=14maxlength=14/inputname=ruxuetype=textvalue=size=14maxlength=14/x/tdinputname=jiguantype=textvalue=size=20maxlength=50/x/tdinputtype=hiddenname=bjvalue=/12.4本章小結(jié)本章通過(guò)一個(gè)具體的應(yīng)用實(shí)例介紹了基于JSP的應(yīng)用程序開(kāi)發(fā)的一般方法,并給出了部分源代碼。希望通過(guò)此章內(nèi)容介紹,使讀者初步Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的開(kāi)發(fā)方法。對(duì)于基于其他開(kāi)發(fā)工具的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng),起到拋磚引玉的作用。12.5思

34、考與練習(xí)1、利用JSP+Oracle設(shè)計(jì)一個(gè)教材管理系統(tǒng),基本功能包括:(1)教材基本信息的添加、刪除、修改、查詢(xún)。教材發(fā)放信息的添加、刪除、修改、查詢(xún)。統(tǒng)計(jì)以上各類(lèi)信息。附錄:常用的數(shù)據(jù)字典和函數(shù)表A:Oracle10g常用數(shù)據(jù)字典數(shù)據(jù)字典名稱(chēng)說(shuō)明ALL_CATALOG可以由當(dāng)前連接的用戶(hù)訪問(wèn)的所有表、視圖、同義詞、序列ALLCOLCOMMENTS可訪問(wèn)的表和視圖的列注釋ALL_COL_PRIVS授權(quán)者、被授權(quán)者、擁有者是當(dāng)前用戶(hù),或者被授予當(dāng)前啟用的角色霍PUBLIC(公共)用戶(hù)的列的授權(quán)情況ALLCOLPRIVSMADE當(dāng)前用戶(hù)是擁有者或授權(quán)者的所有列的授權(quán)情況ALL_COL_PRIVS

35、_RECD當(dāng)前用戶(hù)、PUBLIC(公共)用戶(hù)或當(dāng)前啟用的角色是被授權(quán)者的列的授權(quán)情況ALLCONSTRAINTS可訪問(wèn)表的約束條件ALLCONSCOLUMNS約束條件中可訪問(wèn)列的信息ALLDBLINKS當(dāng)前用戶(hù)的可用數(shù)據(jù)庫(kù)鏈接ALLDEFAUDITOPTS新建對(duì)象的審計(jì)選項(xiàng)ALLDEPENDENCIES當(dāng)前用戶(hù)可訪冋對(duì)象的依賴(lài)和被依賴(lài)對(duì)象ALLERRORS用戶(hù)被允許創(chuàng)建的存儲(chǔ)對(duì)象的現(xiàn)有錯(cuò)誤信息ALLINDEXES當(dāng)前用戶(hù)可訪冋表的索引的描述信息ALLINDCOLUMNS可訪問(wèn)表的索引包含的列ALLOBJECTS當(dāng)前用戶(hù)的所有可訪問(wèn)對(duì)象ALLSEQUENCES當(dāng)前用戶(hù)可訪問(wèn)的序列的描述對(duì)象ALL

36、SNAPSHOTS當(dāng)前用戶(hù)可見(jiàn)的快照ALLSOURCE用戶(hù)被允許創(chuàng)建的存儲(chǔ)對(duì)象的現(xiàn)有資源ALLSYNONYMS當(dāng)前用戶(hù)可訪問(wèn)的所有同義詞ALLTABLES當(dāng)前用戶(hù)可訪冋表的描述信息ALLTABCOLUMNS所有表、視圖和簇的列數(shù)據(jù)字典名稱(chēng)說(shuō)明ALL_TAB_COMMENTS當(dāng)前用戶(hù)可訪問(wèn)的所有表和視圖的注釋ALL_TAB_GRANTS_MADE用戶(hù)授權(quán)和用戶(hù)對(duì)象授權(quán)ALL_TAB_GRANTS_RECD被授權(quán)者是當(dāng)前用戶(hù)或者PUBLIC(公共)用戶(hù)的對(duì)象的授權(quán)情況ALL_TAB_PRIVS授權(quán)者、被授權(quán)者、擁有者是當(dāng)前用戶(hù),或者被授予當(dāng)前啟用的角色或PUBLIC(公共)用戶(hù)對(duì)象的授權(quán)情況ALL

37、TABPRIVSMADE用戶(hù)權(quán)限和對(duì)用戶(hù)對(duì)象的授權(quán)ALL_TAB_PRIVS_RECD當(dāng)前用戶(hù)、PUBLIC(公共)用戶(hù)或當(dāng)前啟用的角色是被授權(quán)者的列授權(quán)情況ALLTRIGGERS當(dāng)前用戶(hù)可訪問(wèn)的觸發(fā)器ALLTRIGGERCOLS在用戶(hù)觸發(fā)器或者用戶(hù)表觸發(fā)器中使用的列ALLUSERS數(shù)據(jù)庫(kù)中所有用戶(hù)的信息ALLviewS當(dāng)前用戶(hù)可訪問(wèn)的視圖文本USERAUDITCONNECT對(duì)用戶(hù)登錄/注銷(xiāo)的審計(jì)跟蹤記錄USER_AUDIT_OBJECT關(guān)于用戶(hù)對(duì)象聲明的審計(jì)跟蹤記錄,特別是表、簇、視圖、索引、序列、公共數(shù)據(jù)庫(kù)鏈接、公共同義詞、過(guò)程、觸發(fā)器、回滾段、表空間、角色和用戶(hù)等對(duì)象USERAUDITS

38、ESSION關(guān)于用戶(hù)會(huì)話的審計(jì)跟蹤記錄USER_ADDIT_STATEMENT關(guān)于授權(quán)、喚醒、審計(jì)、撤銷(xiāo)審計(jì)和系統(tǒng)改變的審計(jì)跟蹤記錄USERAUDITTRAIL和當(dāng)前用戶(hù)相關(guān)的審計(jì)跟蹤記錄USERCATALOG當(dāng)前用戶(hù)所有的表、視圖、同義詞和序列USERCLUSTERS用戶(hù)簇的描述信息USERCLUCOLUMNS表列到簇列的映射USERCOLCOMMENTS用戶(hù)表和視圖中列的注釋USERCOLGRANTS擁有者、授權(quán)者或被授權(quán)者是當(dāng)前用戶(hù)的列的授權(quán)情況USERCOLGRANTSMADE當(dāng)前用戶(hù)擁有的對(duì)象列的所有授權(quán)情況USERCOLGRANTSRECD被授權(quán)者是當(dāng)前用戶(hù)的列的授權(quán)情況USERC

39、OLPRIVS擁有者、授權(quán)者或被授權(quán)者是當(dāng)前用戶(hù)的列的授權(quán)情況USERCONSTRAINTS用戶(hù)所有表的約束條件描述USERCONSCOLUMNS約束條件中可訪問(wèn)列的信息USERCROSSREFS用戶(hù)視圖和同義詞的交叉引用USERDBLINKS當(dāng)前用戶(hù)所有的數(shù)據(jù)庫(kù)鏈接USERDEPENDENCIES用戶(hù)對(duì)象的依賴(lài)和被依賴(lài)關(guān)系USERERRORS當(dāng)前用戶(hù)所有存儲(chǔ)對(duì)象當(dāng)前的錯(cuò)誤信息USEREXTENTS組成當(dāng)前用戶(hù)所有短的區(qū)間USERFREESPACE當(dāng)前用戶(hù)可訪冋的表空間中的自由空間USERINDEXES當(dāng)前用戶(hù)所有索引的描述信息USERINDCOLUMNS組成用戶(hù)索引或用戶(hù)表索引的列USERJ

40、OBS當(dāng)前用戶(hù)的所有任務(wù)USEROBJECTS當(dāng)前用戶(hù)的所有對(duì)象USEROBJECTSIZE各種PL/SQL對(duì)象的大?。ㄒ宰止?jié)為單位)USEROBJAUDITOPTS用戶(hù)對(duì)象的審計(jì)選項(xiàng)數(shù)據(jù)字典名稱(chēng)說(shuō)明USER_RESOURCE_LIMITS顯示當(dāng)前用戶(hù)的資源限制USER_ROLE_PRIVS當(dāng)前用戶(hù)被授予的角色USER_SEGMENTS為所有數(shù)據(jù)庫(kù)段分配的存儲(chǔ)區(qū)USERSEQUENCES當(dāng)前用戶(hù)所有的序列的描述信息USER_SNAPSHOTS當(dāng)前用戶(hù)可見(jiàn)的快照USERSNAPSHOTLOGS當(dāng)前用戶(hù)所有的快照日志USERSOURCE當(dāng)前用戶(hù)可訪問(wèn)的存儲(chǔ)對(duì)象資源USER_SYNONYMS當(dāng)前用戶(hù)

41、的私有同義詞USERYSYPRIVS當(dāng)前用戶(hù)被授予的系統(tǒng)權(quán)限USERTABLES對(duì)當(dāng)前用戶(hù)所有表的描述信息USERTABLESPACE可用表空間的描述信息USERTABAUDITOPTS用戶(hù)表和視圖的審計(jì)選項(xiàng)USERTABCOLUMNS用戶(hù)表、視圖和簇的列USERTABCOMMENTS當(dāng)前用戶(hù)所有表和視圖的注釋信息USER_TAB_GRANTS擁有者、授權(quán)者或被授權(quán)者是當(dāng)前用戶(hù)的所有對(duì)象的授權(quán)情況USERTABPRIVS當(dāng)前用戶(hù)的對(duì)象權(quán)限信息USERTABPRIVSMADE當(dāng)前schema賦給其他schema對(duì)自己表的操作權(quán)限視圖USERTABPRIVSRECD其他schema賦給當(dāng)前sche

42、ma的表操作權(quán)限視圖USERTRIGGERS當(dāng)前用戶(hù)的所有觸發(fā)器USERTRIGGERSCOLS用戶(hù)觸發(fā)器所用的列USERTSQUOTES當(dāng)前用戶(hù)的表空間限額USERUSERS當(dāng)前用戶(hù)信息USERviewS當(dāng)前用戶(hù)擁有的視圖的文本AUDIT_ACTIONS記錄設(shè)計(jì)跟蹤行為代碼和映射行為類(lèi)型號(hào)到行為類(lèi)型名稱(chēng)的表COLUMN_PRIVILEGES授權(quán)者、被授權(quán)者或者擁有者是當(dāng)前用戶(hù),或者被授予一個(gè)被啟用的角色或PUBLIC(公共)用戶(hù)的那些列的授權(quán)情況DICTIONARY數(shù)據(jù)字典表和視圖的描述信息DICTCOLUMNS數(shù)據(jù)字典表和視圖列的描述信息GLOBALNAME全局?jǐn)?shù)據(jù)庫(kù)名INDEXHISTO

43、GRAM對(duì)重復(fù)鍵的統(tǒng)計(jì)INDEXSTATS對(duì)B樹(shù)的統(tǒng)計(jì)信息RESOURCECOST每種資源的代價(jià)ROLEROLEPRIVS被授予角色的角色ROLESYSPRIVS被授予角色的系統(tǒng)特權(quán)ROLETABPRIVS被授予角色的表的特權(quán)SESSIONPRIVS用戶(hù)當(dāng)前已經(jīng)設(shè)置的特權(quán)SESSIONRLOES當(dāng)前用戶(hù)啟用的角色TABLE_PRIVILEGES授權(quán)者、被授權(quán)者或者擁有者是當(dāng)前用戶(hù),或者被授予一個(gè)啟用的角色或PUBLIC(公共)用戶(hù)的那些對(duì)象的授權(quán)情況表B:Oracle10g常用的動(dòng)態(tài)性能視圖動(dòng)態(tài)性能視圖名稱(chēng)說(shuō)明V$FIXEDTABLE用于列出所有可用的動(dòng)態(tài)性能視圖和動(dòng)態(tài)性能表V$INSTANC

44、E用于取得當(dāng)前例程的詳細(xì)信息V$SGA用于顯示SGA主要組成部分(共享池、數(shù)據(jù)高速緩存和重做日志緩沖區(qū))的尺寸V$SGAINFO用于取得SGA更詳細(xì)的信息V$PARANETER用于取得初始化參數(shù)的詳細(xì)信息V$VERSION用于取得Oracle版本的詳細(xì)信息V$OPTION用于顯示已經(jīng)安裝的Oracle選項(xiàng)V$SESSION用于顯示會(huì)話的詳細(xì)信息V$PROCESS用于顯示與Oracle相關(guān)的所有進(jìn)程的信息(包括后臺(tái)進(jìn)程和服務(wù)器進(jìn)程)V$BGPROCESS用于顯示后臺(tái)進(jìn)程的詳細(xì)信息V$DATABASE用于取得當(dāng)前數(shù)據(jù)庫(kù)的詳細(xì)信息V$CONTROLFILE用于取得當(dāng)前數(shù)據(jù)庫(kù)所有控制文件的信息V$DA

45、TAFILE用于取得當(dāng)前數(shù)據(jù)庫(kù)所有數(shù)據(jù)文件的詳細(xì)信息V$DBFILE用于取得數(shù)據(jù)文件編號(hào)及名稱(chēng)V$LOGFILE用于取得重做日志成員的信息V$LOG用于顯示日志組的詳細(xì)信息V$THREAD用于取得重做線程的詳細(xì)信息,當(dāng)使用RAC結(jié)構(gòu)時(shí),每個(gè)例程都對(duì)應(yīng)一個(gè)重做線程V$LOCK用于顯示鎖信息,通過(guò)與V$SESSION進(jìn)行連接查詢(xún),可以顯示占有鎖的會(huì)話,以及等待鎖的會(huì)話V$LOCKED_OBJECT用于顯示被加鎖的數(shù)據(jù)庫(kù)對(duì)象,通過(guò)與DBA_OBJECTS進(jìn)行連接查詢(xún)??梢燥@示具體的對(duì)象名及執(zhí)行加鎖操作的Oracle用戶(hù)名V$ROLLNAME用于顯示處于ONLINE狀態(tài)的UNDO段V$ROLLSTAT

46、用于顯示UNDO段統(tǒng)計(jì)信息,通過(guò)與V$ROLLNAME進(jìn)行連接查詢(xún),可以顯示UNDO段的詳細(xì)統(tǒng)計(jì)信息V$TABLESPACE用于顯示表空間信息V$TEMPFILE用于顯示當(dāng)前數(shù)據(jù)庫(kù)所包含的臨時(shí)文件表C:Oracle10g常用的系統(tǒng)內(nèi)置函數(shù)(一)一一數(shù)學(xué)函數(shù)與”的結(jié)果函數(shù)名描述ABS(x)返回x的絕對(duì)值A(chǔ)COS(x)返回x的反余弦值A(chǔ)SIN(x)返回x的反正弦值A(chǔ)TAN(x)返回x的反正切值A(chǔ)TANS(x,y)返回x和y的反正切值BITAND(x,y)返回x和y的二進(jìn)制“COS(x)返回x的余弦值,其中COSH(x)返回x的雙曲余弦值x是以弧度表示的角度CEIL(x)EXP(x)FLOOR(x)

47、LOG(x,y)LN(x)MOD(x,y)POWER(x,y)返回大于或等于x的最小整數(shù)返回E的x次幕,其中E等于2.71828183返回小于或等于x的最大整數(shù)返回底為x的y的對(duì)數(shù)值返回x的自然對(duì)數(shù)值返回x除以y的余數(shù)返回x的y次幕圓整x值。如果不指定y,則圓整到整數(shù);如果指定y,則圓整到y(tǒng)ROUND(x,y)指定的小數(shù)點(diǎn)位數(shù);如果y是負(fù)數(shù),則圓整到小數(shù)點(diǎn)左端的位數(shù)符號(hào)函數(shù),如果x是負(fù)數(shù),則返回-1;如果x是正數(shù),則返回1;SIGN(x)如果x是0,則返回0SIN(x)SINH(x)SQRT(x)TAN(x)TANH(x)返回x的正弦值返回x的雙曲正弦值返回x的平方根返回x的正切值返回x的雙曲

48、正切值TRUNK(x,y)截?cái)鄕值。如果不指定y,則截?cái)嗟秸麛?shù);如果指定y,則截?cái)嗟統(tǒng)指定的小數(shù)點(diǎn)位數(shù);如果y是負(fù)數(shù),則截?cái)嗟叫?shù)點(diǎn)左端的位數(shù)表D:Oracle10g常用的系統(tǒng)內(nèi)置函數(shù)函數(shù)名ASCII(x)CHR(x)CONCAT(x,y)INITCAP(x)INSTR(x,find_string,start,occurrenee)LENGTH(x)LOWER(x)LPAD(x,width,pad_string)LTRIM(x,trim_string)NANVL(x,value)NVL(x,value)NVL2(x,value1,value2)REPLACE(x,search_string,repla

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論