版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、皖 西 學(xué) 院 本科畢業(yè)論文(設(shè)計) 論 文 題 目基于嵌入式 sql 技術(shù)數(shù)據(jù)檢 索功能的實現(xiàn) 姓名(學(xué)號) 系 別 信息工程學(xué)院 專 業(yè) 計算機科學(xué)與技術(shù) 0701 導(dǎo) 師 姓 名 二 一一年 六 月 基于嵌入式基于嵌入式 sqlsql 技術(shù)數(shù)據(jù)檢索功能的實現(xiàn)技術(shù)數(shù)據(jù)檢索功能的實現(xiàn) 作 者 指導(dǎo)教師 摘要摘要:sql 是面向集合的描述性語言,具有功能強、效率高、使用靈活等特點,而單純的 s ql 語言是一種獨立的、非過程性語言,很難實現(xiàn)具有過程性控制的完整應(yīng)用系統(tǒng)。嵌入 式 sql 語言就是將 sql 語句直接嵌入到程序的源代碼中,與其他高級程序設(shè)計語言相結(jié) 合,使 sql 語句負責(zé)控制數(shù)
2、據(jù)庫,高級語言負責(zé)控制程序流程,從而實現(xiàn)各種復(fù)雜應(yīng)用的 處理。 本文在基于 sql 技術(shù)的基礎(chǔ)上,介紹了嵌入式 sql 技術(shù)的發(fā)展、嵌入式 sql 語言以及嵌入式 sql 工作原理及流程,以 java 作為宿主語言,以 “圖書館管理系統(tǒng)” 的設(shè)計為例,描述了嵌入式 sql 技術(shù)的具體應(yīng)用,重點設(shè)計并實現(xiàn)了數(shù)據(jù)的檢索功能。 關(guān)鍵詞:關(guān)鍵詞: 嵌入式 sql;宿主語言;java ;jdbc the implementation of data retrieval based on embedded sql technology abstract: sql is a descriptive lang
3、uage which facing the set, it has strong function, high efficiency, agile using and so on. while pure sql language is independent and not the process of language, it hard to achieve application systems which with process sexual control, embedded sql language embedded the sql statement to program sou
4、rce code directly, then combined other high-level programming language, making the sql statement responsible for controlling the database and senior language is responsible for control processes, so as to realize the processing various complex applications. in this paper, on the basis of sql technol
5、ogy, introduced the development of embedded sql technology, embedded sql language and embedded sql working principle and process, as the host language in java, with library management system the design as an example, describes the application of the embedded sql technology, key design and realized d
6、ata retrieval functions. keykey words:words: embedded sql ; host language ; java ;jdbc 目目 錄錄 1 緒論.1 1.1課題背景.1 1.2國內(nèi)外的發(fā)展及現(xiàn)狀.1 1.3 課題研究的主要內(nèi)容.2 2 嵌入式 sql 技術(shù) .2 2.1 sql 和嵌入式 sql 簡介.2 2.2 sql 語句.3 2.2.1 基本 sql 語句 .3 2.2.2 復(fù)雜 sql 語句 .4 2.3 嵌入式 sql 語句.6 2.4 嵌入式 sql 工作原理及流程 .6 2.5 嵌入式 sql 應(yīng)用 .7 2.5.1 宿主語言 j
7、ava 簡介 .7 2.5.2 宿主語言 java db 引擎驅(qū)動.7 2.5.3 宿主語言 java 應(yīng)用程序接口jdbc .9 2.5.4 嵌入式 sql 應(yīng)用示例 .14 3 數(shù)據(jù)檢索功能的實現(xiàn).17 3.1 圖書管理系統(tǒng) .18 3.2 數(shù)據(jù)檢索功能的設(shè)計 .18 3.2.1 系統(tǒng)結(jié)構(gòu)設(shè)計.18 3.2.2 數(shù)據(jù)庫設(shè)計.19 3.3 數(shù)據(jù)檢索功能的實現(xiàn) .21 總 結(jié) .26 致 謝 .27 參考文獻: .28 1 1 緒論緒論 1.11.1課題背景課題背景 數(shù)據(jù)庫技術(shù)是現(xiàn)代信息科學(xué)與技術(shù)的重要組成部分,是計算機數(shù)據(jù)處 理與信息管理系統(tǒng)的核心。數(shù)據(jù)庫技術(shù)研究和解決了計算機信息處理過程中
8、 大量數(shù)據(jù)有效地組織和存儲的問題,在數(shù)據(jù)庫系統(tǒng)中減少數(shù)據(jù)存儲冗余、實 現(xiàn)數(shù)據(jù)共享、保障數(shù)據(jù)安全以及高效地檢索數(shù)據(jù)和處理數(shù)據(jù)。 隨著嵌入式系統(tǒng)軟件的發(fā)展,編程語言從 10 多年以前的匯編為主流發(fā) 展到現(xiàn)在 c、c+、java 為主流。另外,面向?qū)ο笤O(shè)計技術(shù)、組件技術(shù)等在嵌 入式系統(tǒng)軟件設(shè)計中的應(yīng)用也日益引起人們的重視。 嵌入式 sql(英文: embedded sql)是一種將 sql 語句直接寫入 c 語言, javal,fortran, ada 等編程語言的源代碼中的方法。借此方法,可使得應(yīng)用 程序擁有了訪問數(shù)據(jù)以及處理數(shù)據(jù)的能力。在這一方法中,將 sql 文嵌入的 目標源碼的語言稱為宿主語
9、言。 1.21.2國內(nèi)外的發(fā)展及現(xiàn)狀國內(nèi)外的發(fā)展及現(xiàn)狀 隨著嵌入式 sql 技術(shù)的普遍使用,支持嵌入式 sql 的數(shù)據(jù)庫產(chǎn)品也大量 出現(xiàn):oracle database ada pro*ada 在 oracle 7.3 的版本中被加入產(chǎn)品族,并且在 oracle 8 中被替換為 sql*module。但在此之后就一直沒有更新2。sql*module 支持 ada 83. c/c+ pro*c 在 oracle 8 時被替換成了 pro*c/c+。之后 pro*c/c+ 到 oracle database 11g 仍都在被支持。 cobol pro*cobol 到 oracle database
10、 11g 仍都在被支持。 fortran pro*fortran 在 oracle 8 之后的 oracle 版本中就不再被更新,但 bug 修正 仍在維護中3。 pascal pro*pascal 在 oracle 8 之后的 oracle 版本中就不再被更新3。 pi/l pro*pl/i 自 oracle 8 之后就不再被更新,但文檔中仍然有記述3。 ibm db2 ibm db2 的版本 9 中提供了對于 c/c+,cobol,java 等宿主語言的嵌入式 sql 的支持。 postgresql c/c+ postgresql 自版本 6.3 起就提供了對于 c/c+的嵌入式 sql
11、的支持,以 ecpg 組件的形式存在。 1.31.3 課題研究課題研究的主要內(nèi)容的主要內(nèi)容 首先,本文簡要的敘述了嵌入式 sql 的定義以及發(fā)展現(xiàn)狀,并詳細介紹 了嵌入式 sql 的數(shù)據(jù)檢索語句:基本嵌入式 sql 數(shù)據(jù)檢索功能語句和復(fù)雜嵌 入式 sql 數(shù)據(jù)檢索語句;然后,本文以 java 為宿主語言,重點分析嵌入式 sql 在宿主語言 java 中的工作原理和處理流程 ,以及對 jdbc 驅(qū)動和 jdbc api 做了詳細介紹;最后,針對嵌入式 sql 和宿主語言 java,以實例“圖書 館管理系統(tǒng)”演示嵌入式 sql 的具體應(yīng)用。 2 2 嵌入式嵌入式 sql 技術(shù)技術(shù) 2.12.1 s
12、ql 和嵌入式和嵌入式 sql 簡介簡介 sql(structured query language)結(jié)構(gòu)化查詢語言,是一種數(shù)據(jù)庫查詢 和程序設(shè)計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng)。 sql 是高級的非過程化編程語言,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它 不要求用戶指定對數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式, 所以具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫系統(tǒng),可以使用相同的 sql 語言作 為數(shù)據(jù)輸入與管理的接口。它以記錄集合作為操作對象,所有 sql 語句接受 集合作為輸入,返回集合作為輸出,這種集合特性允許一條 sql 語句的輸出 作為另一條 sql 語句的輸入,所以
13、sql 語句可以嵌套,這使他具有極大的靈 活性和強大的功能,在多數(shù)情況下,在其他語言中需要一大段程序?qū)崿F(xiàn)的功 能只需要一個 sql 語句就可以達到目的,這也意味著用 sql 語言可以寫出非 常復(fù)雜的語句。 sql 語言包含 4 個部分: 數(shù)據(jù)定義語言(ddl),例如:create、drop、alter 等語句。 數(shù)據(jù)操作語言(dml),例如:insert(插入)、update(修改)、 delete(刪除)語句。 數(shù)據(jù)查詢語言(dql),例如:select 語句。 數(shù)據(jù)控制語言(dcl),例如:grant、revoke、commit、rollback 等 語句。 sql 語言包括三種主要程序設(shè)
14、計語言類別的語句:數(shù)據(jù)定義語言 (ddl),數(shù)據(jù)操作語言(dml)及數(shù)據(jù)控制語言(dcl)。 嵌入式 sql(英文: embedded sql)是一種將 sql 語句直接寫入 c 語言, cobol,fortran, java 等編程語言的源代碼中的方法。借此方法,可使得應(yīng) 用程序擁有了訪問數(shù)據(jù)以及處理數(shù)據(jù)的能力。在這一方法中,將 sql 文嵌入 的目標源碼的語言稱為宿主語言。 在 sql 標準的 sql86(1986 年發(fā)布)中定義了對于 cobol, fortran, pi/l 等語言的嵌入式 sql 的規(guī)范。在 sql89(1989 年發(fā)布)規(guī)范中,定義了對于 c 語言的嵌入式 sql
15、的規(guī)范。一些大型的數(shù)據(jù)庫廠商發(fā)布的數(shù)據(jù)庫產(chǎn)品中,都 提供了對于嵌入式 sql 的支持。比如 oracle, db2 等。 2.22.2 sql 語句語句 2.2.12.2.1 基本基本 sqlsql 語句語句 簡單嵌入式 sql 數(shù)據(jù)檢索功能語句表示只是對單表的數(shù)據(jù)檢索,其基 本語句為: “select from where group by having order by “ 例如: 查詢學(xué)號為“s040901106”學(xué)生的姓名 表 2-1,studentinfo 表相關(guān)數(shù)據(jù) stuidstunamedeptidsex s040201101 任非 02m s040901102 王情 02f
16、s040901103 戴麗 08f s040901106 鄭治 08m sql 語句: select stuname from studentinfo where stuid = s040901106; 2.2.12.2.1 復(fù)雜復(fù)雜 sqlsql 語句語句 然而現(xiàn)實數(shù)據(jù)庫項目中,對于數(shù)據(jù)庫的數(shù)據(jù)檢索可能設(shè)計有多個表,或要 求更復(fù)雜的數(shù)據(jù)檢索 sql 語句,所以有必要介紹幾種復(fù)雜的嵌入式 sql 數(shù)據(jù) 檢索語句。 3.2.13.2.1 聯(lián)接查詢聯(lián)接查詢 (一一)內(nèi)聯(lián)接內(nèi)聯(lián)接 內(nèi)連接查詢操作列出與連接條件匹配的數(shù)據(jù)行,它使用比較運算符比較被連 接列的列值。內(nèi)連接分三種: 1、等值連接:在連接條件
17、中使用等于號(=)運算符比較被連接列的列值,其查 詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。 2、不等連接: 在連接條件使用除等于運算符以外的其它比較運算符比較被 連接的列的列值。這些運算符包括、=、=、!和。 3、自然連接:在連接條件中使用等于(=)運算符比較被連接列的列值,但它使 用選擇列表指出查詢結(jié)果集合中所包括的列,并刪除連接表中的重復(fù)列。 例,下面使用等值連接列出 authors 和 publishers 表中位于同一城市的作者和 出版社: select * from authors as a inner join publishers as p on a.city=p.ci
18、ty 又如使用自然連接,在選擇列表中刪除 authors 和 publishers 表中重復(fù)列(city 和 state): select a.*,p.pub_id,p.pub_name,p.country from authors as a inner join publishers as p on a.city=p.city (二二)外連接外連接 內(nèi)連接時,返回查詢結(jié)果集合中的僅是符合查詢條件( where 搜索條件或 having 條件)和連接條件的行。而采用外連接時,它返回到查詢結(jié)果集合 中的不僅包含符合連接條件的行,而且還包括左表(左外連接時)、右表(右外 連接時)或兩個邊接表(全外
19、連接)中的所有數(shù)據(jù)行。 如下面使用左外連接將論壇內(nèi)容和作者信息連接起來: select a.*,b.* from luntan left join usertable as b on a.username=b.username 以及他們所在的城市: select a.*,b.* from city as a full outer join user as b on a.username=b.username (三三)交叉連接交叉連接 交叉連接不帶 where 子句,它返回被連接的兩個表所有數(shù)據(jù)行的笛卡爾積, 返回到結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個表中符合查詢條件的數(shù)據(jù)行數(shù)乘以 第二個表中符合查詢
20、條件的數(shù)據(jù)行數(shù)。 例,titles 表中有 6 類圖書,而 publishers 表中有 8 家出版社,則下列交叉連 接檢索到的記錄數(shù)將等 于 6*8=48 行。 select type,pub_name from titles cross join publishers order by type 2.32.3 嵌入式嵌入式 sql 語句語句 (1)宿主變量 宿主變量就是在嵌入式 sql 語句中引用主語言說明的程序變量 如:在 java 語句中對程序變量:username、password 的進行數(shù)據(jù)庫插入 操作 string sql = insert into reader(usernam
21、e,password) values( + username + , + password + ); 在嵌入式 sql 語句中使用宿主變量前,必須采用 “+username + ” 的形 式給宿主變量說明。 2.42.4 嵌入式嵌入式 sqlsql 工作原理及流程工作原理及流程 圖 2.1 數(shù)據(jù)庫產(chǎn)品中嵌入式 sql 操作流程圖 為了解決嵌入式 sql 源碼的處理流程問題,數(shù)據(jù)庫廠商需要提供一個嵌入 式 sql 的預(yù)編譯器,把包含有嵌入式 sql 文的宿主語言源碼轉(zhuǎn)換成純宿主語言 的代碼。這樣一來,源碼即可使用宿主語言對應(yīng)的編譯器進行編譯。通常情況 下,經(jīng)過嵌入式 sql 的預(yù)編譯之后,原有的
22、嵌入式 sql 會被轉(zhuǎn)換成一系列函數(shù) 調(diào)用。因此,數(shù)據(jù)庫廠商還需要提供一些列函數(shù)庫(圖 2.1),以確保鏈接器能 夠把代碼中的函數(shù)調(diào)用與對應(yīng)的實現(xiàn)鏈接起來。 2.52.5 嵌入式嵌入式 sqlsql 應(yīng)用應(yīng)用 2.5.12.5.1 宿主語言宿主語言 javajava 簡介簡介 java,是由 sun microsystems 公司于 1995 年 5 月推出的 java 程序設(shè) 計語言和 java 平臺的總稱。用 java 實現(xiàn)的 hotjava 瀏覽器(支持 java applet)顯示了 java 的魅力:跨平臺、動態(tài)的 web、internet 計算。從此, java 被廣泛接受并推動了
23、 web 的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持 java applet。 java 項目運行環(huán)境平臺(圖 2.2): 圖 2.2java 程序運行環(huán)境平臺圖 2.5.22.5.2 宿主語言宿主語言 javajava dbdb 引擎驅(qū)動引擎驅(qū)動 眾所周知,在臺式機領(lǐng)域,db 是一個十分關(guān)鍵的基礎(chǔ)軟件。以往嵌入式 系統(tǒng)的軟件可能更側(cè)重于與硬件的交互與控制,但隨著對嵌入式系統(tǒng)功能需 求的日益復(fù)雜化,嵌入式系統(tǒng)軟件中,信息、數(shù)據(jù)的保存與管理的比重也日 應(yīng)用組件應(yīng)用組件應(yīng)用組件 .class 文件庫 db 組件 jvm 益增加。在這樣的背景下,嵌入式系統(tǒng)軟件開發(fā)中,通過引入 db 組件,對實 現(xiàn)軟件整體框
24、架結(jié)構(gòu)的組件化與簡單化,有著十分明顯而重要的意義。 db 引擎驅(qū)動的總體框架(如圖 2.3):整個 db 組件設(shè)計為 3 層結(jié)構(gòu),分 別為 jdbc 接口層、sql 解釋層和動作執(zhí)行層。這 3 層之間呈單向依賴關(guān)系。 也就是說,sql 解釋層依賴于動作執(zhí)行層,但動作執(zhí)行層不依賴于其上面的兩 層,可以單獨存在而直接被使用。如果用戶以使用方便為主要目的,可采用 完全配置方式,應(yīng)用程序通過 jdbc 接口層存取數(shù)據(jù)。反之,如果用戶對空間 和效率要求較高,可僅配置動作執(zhí)行層組件,應(yīng)用程序直接調(diào)用動作執(zhí)行層 的 api 進行數(shù)據(jù)的檢過和更新等操作。 圖 2.3 db 引擎驅(qū)動的總體框架圖 (1)jdbc
25、 接口層 如前文所述是可選組件,旨在為應(yīng)用程序提供一個標準的 db 調(diào)用接口。 (2)sql 解釋層 本 db 組件實現(xiàn)的 sql 解釋層,只實現(xiàn)了標準 sql 的一個小子集,主要完 成 select、delete、insert、update、create table、drop table 等功能。 其中數(shù)據(jù)操作語句(select、delete、insert、update)的解釋要點之一是 where 條件子句的解釋執(zhí)行,類似于數(shù)學(xué)表達式求值算法。 jdbc 接口層 sql 解釋層 動作執(zhí)行層 jvm (3)動作執(zhí)行層 動作執(zhí)行層是整個 db 組件的核心和關(guān)鍵,因為所有的 db 操作最終都由
26、該層完成,同時用戶也可以跳過上面的兩層,直接調(diào)用該層的 api,以實現(xiàn)相 同的數(shù)據(jù)操作功能。 2.5.32.5.3 宿主語言宿主語言 javajava 應(yīng)用程序接口應(yīng)用程序接口jdbcjdbc (1) jdbc 介紹 jdbc(java data base connectivity,java 數(shù)據(jù)庫連接)是一種用于執(zhí) 行 sql 語句的 java api(如圖 2.6、圖 2.7),可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng) 一訪問,它由一組用 java 語言編寫的類和接口組成。jdbc 為工具/數(shù)據(jù)庫開 發(fā)人員提供了一個標準的 api,據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫 開發(fā)人員能夠用純 java a
27、pi 編寫數(shù)據(jù)庫應(yīng)用程序。 java 數(shù)據(jù)庫連接體系結(jié)構(gòu)是用于 java 應(yīng)用程序連接數(shù)據(jù)庫的標準方法。 jdbc 對 java 程序員而言是 api,對實現(xiàn)與數(shù)據(jù)庫連接的服務(wù)提供商而言是接 口模型。作為 api,jdbc 為程序開發(fā)提供標準的接口,并為數(shù)據(jù)庫廠商及第 三方中間件廠商實現(xiàn)與數(shù)據(jù)庫的連接提供了標準方法(如圖 2.4)。jdbc 使 用已有的 sql 標準并支持與其它數(shù)據(jù)庫連接標準,如 odbc 之間的橋接。jdbc 實現(xiàn)了所有這些面向標準的目標并且具有簡單、嚴格類型定義且高性能實現(xiàn) 的接口。 java 具有堅固、安全、易于使用、易于理解和可從網(wǎng)絡(luò)上自動下載等 特性,是編寫數(shù)據(jù)庫應(yīng)
28、用程序的杰出語言。所需要的只是 java 應(yīng)用程序與各 種不同數(shù)據(jù)庫之間進行對話的方法。而 jdbc 正是作為此種用途的機制。 jdbc 擴展了 java 的功能。例如,用 java 和 jdbc api 可以發(fā)布含 有 applet 的網(wǎng)頁,而該 applet 使用的信息可能來自遠程數(shù)據(jù)庫。企業(yè)也 可以用 jdbc 通過 intranet 將所有職員連到一個或多個內(nèi)部數(shù)據(jù)庫中(即 使這些職員所用的計算機有 windows、 macintosh 和 unix 等各種不同的操 作系統(tǒng))。隨著越來越多的程序員開始使用 java 編程語言,對從 java 中便 捷地訪問數(shù)據(jù)庫的要求也在日益增加。 圖
29、 2.4.jdbc 框架圖 (2) jdbc 驅(qū)動類型 圖 2.5jdbc 驅(qū)動類型說明圖 jdbc-odbc 橋(jdbc-odbc bridge)(圖 2.5) jdbc 調(diào)用odbc 調(diào)用。要求 odbc 代碼、client 端代碼 都要在客戶機上安裝。 本地 api 部分 java 驅(qū)動(native-api partly-java driver) jdbc 調(diào)用 數(shù)據(jù)庫的 client 端 api,也需要在客戶機上 安裝代碼。 網(wǎng)絡(luò)協(xié)議完全 java 驅(qū)動(jdbc-net pure java driver) jdbc 調(diào)用 獨立于任何 dbms 的網(wǎng)絡(luò)協(xié)議,該協(xié)議 將由另外一個服務(wù)
30、器轉(zhuǎn)換為某種 dbms 協(xié)議。 本地協(xié)議完全 java 驅(qū)動(native-protocol pure java driver) jdbc 調(diào)用 特定 dbms 的網(wǎng)絡(luò)協(xié)議。 (3) jdbc api jdbc api 功能: 建立與數(shù)據(jù)庫的連接 發(fā)送 sql 語句 處理結(jié)果 (1 1)jdbcjdbc apiapi 類:類: 圖 2.6 jdbc api 所涉及的類圖 (2)jdbc 類層次:類層次: 圖 2.7 jdbc api 類層次圖 (3 3)建立數(shù)據(jù)庫的連接:)建立數(shù)據(jù)庫的連接: jdbc 的 drivermanager 查找到相應(yīng)的數(shù)據(jù)庫 driver 并裝載。 從系統(tǒng)屬性 ja
31、va.sql 中讀取 driver 的類名,并一一注冊。 在程序中使用 class.forname( )方法動態(tài)裝載并注冊 driver。 如 class.forname(“sun.jdbc.odbc.jdbcodbcdriver”), 注冊 jdbc-odbc 橋。 通過 drivermanager.getconnection( )與數(shù)據(jù)庫建立連接 數(shù)據(jù)庫連接串 url,指定數(shù)據(jù)源以及使用的數(shù)據(jù)庫訪問 協(xié)議。 語法格式:jdbc: 例:通過 jdbc-odbc 橋接驅(qū)動與 wombat 數(shù)據(jù)源建立連接。 connection con = drivermanager.getconnection
32、(“jdbc:odbc: wombat”,”username”,”password”); (4 4)傳送)傳送 sqlsql 語句:語句: 在數(shù)據(jù)庫連接上創(chuàng)建 statement 對象,將各種 sql 語句 發(fā)送到所連接的數(shù)據(jù)庫。 /* 傳送 sql 語句并得到結(jié)果集 rs */ statement stmt = con.createstatement( ); resultset rs = stmt.executequery(“ select a, b, c from table1”); 對于多次執(zhí)行但參數(shù)不同的 sql 語句,可以使用 preparedstatement 對象。 使用 cal
33、lablestatement 對象調(diào)用數(shù)據(jù)庫上的存儲過程。 (5 5)處理結(jié)果集:)處理結(jié)果集: 結(jié)果集是查詢語句返回的數(shù)據(jù)庫記錄的集合。 在結(jié)果集中通過游標(cursor)控制具體記錄的訪問。 sql 數(shù)據(jù)類型與 java 數(shù)據(jù)類型的轉(zhuǎn)換 根據(jù) sql 數(shù)據(jù)類型的不同,使用不同的方法讀取數(shù)據(jù)。 /*處理結(jié)果集 rs*/ while (rs.next( ) int x = rs.getint(“a”); string s = rs.getstring(“b”); float f = getfloat(“c”); stmt.close( ); con.close( ) 2.5.42.5.4 嵌入
34、式嵌入式 sqlsql 應(yīng)用示例應(yīng)用示例 本節(jié)以圖書館管理系統(tǒng)的部分功能模塊為例,演示說明 java 語言中嵌入 sql 的處理流程。 圖 2.8 用戶登陸界面 圖 2.9 用戶登陸后操作界面 系統(tǒng)以用戶登陸界面的初始界面,根據(jù)用戶輸入的用戶名和密碼,使用 gettext()方法獲取用戶輸入的值,并賦值給 java 定義變量“user”、 “pass”,利用 sql 語句結(jié)合變量對數(shù)據(jù)庫中的表 user 進行數(shù)據(jù)匹配,用戶 只有在輸入與數(shù)據(jù)庫相匹配的用戶名和密碼時,才能登陸系統(tǒng),進如圖 2.9 用 戶操作界面 具體sql語句:select * from user where name= + +
35、 user+ and pass= + + pass + ; 部分代碼展示:部分代碼展示: 登陸時對數(shù)據(jù)庫的操作: private void btn_okactionperformed(actionevent e) string user = tf_user.gettext(); / 獲得用戶名 string pass = pf_pass.gettext(); / 獲得密碼 string username = ; int is_admin; / 未輸入用戶名 if (user.equals() joptionpane.showmessagedialog(this, 用戶名不允許 為空!); re
36、turn; try / 在數(shù)據(jù)庫中查詢 string sqlstr = select * from user where name= + + user + and pass= + + pass + ; resultset result = basedao.executequery(sqlstr); if (result.next() username = result.getstring(name); is_admin = result.getint(is_admin); basedao.close(); else joptionpane.showmessagedialog(this, 用戶名
37、或 密碼不正確!); basedao.close(); return; globalvar.login_user = username; / 記錄當前用戶 / 進入主界面 main main = new main(); main.setpurview(byte) is_admin); this.dispose(); catch (exception ex) ex.printstacktrace(); 連接數(shù)據(jù)庫部分: / 構(gòu)造方法,創(chuàng)建數(shù)據(jù)庫連接 private basedao() try if (conn = null) class.forname(driver); / 加載數(shù)據(jù)庫驅(qū)動 co
38、nn = drivermanager.getconnection(url, dbuser, dbpwd); / 建立數(shù)據(jù)庫連接 else return; catch (exception ee) ee.printstacktrace(); 實際查詢操作部分: / 執(zhí)行數(shù)據(jù)庫查詢操作 public static resultset executequery(string sql) try if (conn = null) new basedao(); return conn.createstatement(resultset.type_scroll_sensitive, resultset.co
39、ncur_updatable).executequery(sql); / 執(zhí)行 數(shù)據(jù)庫查詢 catch (sqlexception e) e.printstacktrace(); return null; 3 3 數(shù)據(jù)檢索功能的實現(xiàn)數(shù)據(jù)檢索功能的實現(xiàn) 本章以“圖書館管理系統(tǒng)”為例,介紹圖書館系統(tǒng)結(jié)構(gòu)設(shè)計和數(shù)據(jù)庫設(shè)計, 重點針對系統(tǒng)的“查詢管理”模塊的“圖書信息查詢”進行說明分析。 3.13.1 圖書管理系統(tǒng)圖書管理系統(tǒng) 圖書館作為一種信息資源的集散地,圖書和用戶借閱資料繁多,包含很 多的信息數(shù)據(jù)的管理,現(xiàn)今,有很多的圖書館都是初步開始使用,甚至尚未 使用計算機進行信息管理。根據(jù)調(diào)查得知,他們以
40、前對信息管理的主要方式 是基于文本、表格等紙介質(zhì)的手工處理,對于圖書借閱情況(如借書天數(shù)、 超過限定借書時間的天數(shù))的統(tǒng)計和核實等往往采用對借書卡的人工檢查進 行,對借閱者的借閱權(quán)限、以及借閱天數(shù)等用人工計算、手抄進行。數(shù)據(jù)信 息處理工作量大,容易出錯;由于數(shù)據(jù)繁多,容易丟失,且不易查找??偟?來說,缺乏系統(tǒng),規(guī)范的信息管理手段。盡管有的圖書館有計算機,但是尚 未用于信息管理,沒有發(fā)揮它的效力,資源閑置比較突出,這就是管理信息 系統(tǒng)的開發(fā)的基本環(huán)境。 數(shù)據(jù)處理手工操作,工作量大,出錯率高,出錯后不易更改。圖書館采 取手工方式對圖書借閱情況進行人工管理,由于信息比較多,圖書借閱信息 的管理工作混
41、亂而又復(fù)雜;一般借閱情況是記錄在借書證上,圖書的數(shù)目和 內(nèi)容記錄在文件中,圖書館的工作人員和管理員也只是當時對它比較清楚, 時間一長,如再要進行查詢,就得在眾多的資料中翻閱、查找了,造成查詢 費時、費力。如要對很長時間以前的圖書進行更改就更加困難了。 本系統(tǒng)以研究 java 嵌入 sql 為目的實現(xiàn)圖書館的基本功能:用戶登陸、 圖書管理、用戶管理、用戶借書還書管理。 3.23.2 數(shù)據(jù)檢索功能的設(shè)計數(shù)據(jù)檢索功能的設(shè)計 3.2.13.2.1 系統(tǒng)結(jié)構(gòu)設(shè)計系統(tǒng)結(jié)構(gòu)設(shè)計 本系統(tǒng)使用對象為圖書館管理員。其中包括基本的信息維護、用戶的 借還書管理、數(shù)據(jù)檢索和系統(tǒng)管理四大模塊。 錯誤用戶名或密碼 系統(tǒng)主頁
42、面 借還管理 基礎(chǔ)維護菜單 查詢管理 系統(tǒng)維護 用戶信息 圖書維護 借書 還書 圖書查詢 用戶查詢 密碼修改 退出系統(tǒng) 新增用戶信息 刪除用戶信息 修改用戶信息 新增圖書信息 刪除圖書信息 修改圖書信息 管理員登陸 登陸 登陸失敗 圖 3.1 總體設(shè)計架構(gòu) 3.2.23.2.2 數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計 本系統(tǒng)數(shù)據(jù)庫使用的是 mysql 數(shù)據(jù)庫,使用該數(shù)據(jù)庫是因為本數(shù)據(jù)庫的使 用方便性。首先建立一個數(shù)據(jù)庫名為 library,在其中建立四個信息表,通過 輸入數(shù)據(jù)建立表或者直接建立空表并設(shè)置字段名和數(shù)據(jù)類型。建立的四個表分 別為用戶信息表、圖書信息表、借還書信息表、管理員信息表。數(shù)據(jù)庫具體設(shè) 計如表
43、 3-1,3-2,3-3,3-4 所示: 表 3-1 用戶信息表(user) 字段名數(shù)據(jù)類型可否為空說明 idint(100) 不可自動編號 namevarchar(20) 不可用戶名 typevarchar(20) 不可用戶角色 sexvarchar(20) 不可性別 max_numvarchar(20) 不可最大借書數(shù) days_numvarchar(20) 不可結(jié)束天數(shù) 表 3-2 圖書息表(book) 字段名數(shù)據(jù)類型可否為空說明 idint(100) 不可圖書編號 namevarchar(20) 不可圖書名 typevarchar(20) 不可種類 authorvarchar(20)
44、不可作者 translatorvarchar(20) 不可翻譯者 publishervarchar(20) 不可出版社 publish_timevarchar(20) 不可出版時間 pricevarchar(20) 不可價格 stockvarchar(20) 不可狀態(tài) 表 3-3 借還書信息表(borrow) 字段名數(shù)據(jù)類型可否為空說明 book_idvarchar(20) 不可圖書編號 reader_idvarchar(20) 不可讀者 id borrow_datevarchar(20) 不可借書時間 back_datevarchar(20) 不可還書時間 is_backint(10) 不可
45、是否歸還 idint(100) 不可自動編號 表 3-4 管理員信息表(user) 字段名數(shù)據(jù)類型可否為空說明 idint(100) 不可自動編號 namevarchar(20) 不可管理員用戶名 passvarchar(20) 不可借用戶密碼 is_adminint(10) 不可是否為管理員 3.33.3 數(shù)據(jù)檢索功能的實現(xiàn)數(shù)據(jù)檢索功能的實現(xiàn) 該部分以系統(tǒng)查詢圖書信息模塊為例,重點演示說明在宿主語言 java 中 嵌入 sql 實現(xiàn)對書籍數(shù)據(jù)的檢索。 圖 3.2 圖書信息查詢操作界面(1) 圖 3.3 圖書信息查詢操作界面(2) 用戶以正確匹配的用戶名和密碼登陸系統(tǒng)后,點擊“查詢管理”進 入
46、“圖書查詢”,可出現(xiàn)圖 3.3,。 該部分圖書檢索功能以圖書編號為檢索條件,輸入“圖書編號”,點擊 查詢即可查找相應(yīng)的圖書信息,程序?qū)崿F(xiàn)中,在查詢圖書的方法 bookquery 內(nèi)設(shè)置“圖書編號”變量“id”,通過 string id = tf_id.gettext();獲取 用戶輸入的圖書編號 ,最后通過對 sql 語句的執(zhí)行,獲取所要檢索的圖書信 息 sql 語句: string sql = select * from book; if (id != null 部分代碼展示:部分代碼展示: 連接數(shù)據(jù)庫部分: / 構(gòu)造方法,創(chuàng)建數(shù)據(jù)庫連接 private basedao() try if (
47、conn = null) class.forname(driver); / 加載數(shù)據(jù)庫驅(qū)動 conn = drivermanager.getconnection(url, dbuser, dbpwd); / 建立數(shù)據(jù)庫連接 else return; catch (exception ee) ee.printstacktrace(); 前臺實現(xiàn)數(shù)據(jù)檢索的方法: private void btn_cxactionperformed(actionevent e) string id = tf_id.gettext(); / 獲取圖書編號 / 根據(jù)查詢條件構(gòu)建sql string sql = sele
48、ct * from book; if (id != null / 執(zhí)行查詢操作,將查詢結(jié)果顯示到界面 object results = getresult(bookdao.selectbooklist(sql); defaulttablemodel model = new defaulttablemodel(); table.setmodel(model); model.setdatavector(results, heads); 具體執(zhí)行部分: / 執(zhí)行數(shù)據(jù)庫查詢操作 public static resultset executequery(string sql) try if (conn
49、= null) new basedao(); return conn.createstatement(resultset.type_scroll_sensitive, resultset.concur_updatable).executequery(sql); / 執(zhí)行 數(shù)據(jù)庫查詢 catch (sqlexception e) e.printstacktrace(); return null; 獲取最后書籍數(shù)據(jù)信息: /獲得滿足sql語句的圖書實體列表 public static list selectbooklist(string sql) list list = new arraylist(); resu
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2019湘美版 高中美術(shù) 選擇性必修5 工藝《第二單元 印染工藝》大單元整體教學(xué)設(shè)計2020課標
- 2024屆貴州省平壩縣新啟航教育高三第二次適應(yīng)性(模擬)檢測試題數(shù)學(xué)試題
- 2024屆廣東省重點名校高三下期1月月考數(shù)學(xué)試題
- 餐館服務(wù)員勞務(wù)合同
- 材料供應(yīng)合同協(xié)議
- 病情免責(zé)協(xié)議書
- 北京市勞動合同法實施細則全文
- 期末 試題 -2024-2025學(xué)年人教PEP版英語六年級上冊 (含答案)
- 湖北省孝感市漢川市2024-2025學(xué)年九年級上學(xué)期期中歷史試題
- 鋁壓延加工材相關(guān)行業(yè)投資規(guī)劃報告范本
- 初中《學(xué)憲法講憲法》第八個國家憲法日主題教育課件
- 油庫設(shè)計與管理智慧樹知到答案2024年中國石油大學(xué)(華東)
- 2024年青驕第二課堂高中生禁毒知識競賽題庫及答案(108題)
- 解讀國有企業(yè)管理人員處分條例課件
- 2024醫(yī)療機構(gòu)重大事故隱患判定清單(試行)學(xué)習(xí)課件
- 2024年中考文言文專題復(fù)習(xí):斷句+課件
- 《抗心律失常藥物臨床應(yīng)用中國專家共識2023》解讀
- (高清版)TDT 1056-2019 縣級國土資源調(diào)查生產(chǎn)成本定額
- 遼寧省2023-2024學(xué)年普通高中學(xué)業(yè)水平合格性考試(1月)語文試卷(含答案)
- 2023年數(shù)學(xué)競賽AMC8試卷(含答案)
- 英語閱讀理解詞義猜測題解題技巧課件
評論
0/150
提交評論