畢業(yè)設(shè)計(jì)(論文)基于嵌入式SQL技術(shù)數(shù)據(jù)檢索功能的實(shí)現(xiàn)_第1頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于嵌入式SQL技術(shù)數(shù)據(jù)檢索功能的實(shí)現(xiàn)_第2頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于嵌入式SQL技術(shù)數(shù)據(jù)檢索功能的實(shí)現(xiàn)_第3頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于嵌入式SQL技術(shù)數(shù)據(jù)檢索功能的實(shí)現(xiàn)_第4頁(yè)
畢業(yè)設(shè)計(jì)(論文)基于嵌入式SQL技術(shù)數(shù)據(jù)檢索功能的實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、皖 西 學(xué) 院 本科畢業(yè)論文(設(shè)計(jì)) 論 文 題 目基于嵌入式 sql 技術(shù)數(shù)據(jù)檢 索功能的實(shí)現(xiàn) 姓名(學(xué)號(hào)) 系 別 信息工程學(xué)院 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 0701 導(dǎo) 師 姓 名 二 一一年 六 月 基于嵌入式基于嵌入式 sqlsql 技術(shù)數(shù)據(jù)檢索功能的實(shí)現(xiàn)技術(shù)數(shù)據(jù)檢索功能的實(shí)現(xiàn) 作 者 指導(dǎo)教師 摘要摘要:sql 是面向集合的描述性語(yǔ)言,具有功能強(qiáng)、效率高、使用靈活等特點(diǎn),而單純的 s ql 語(yǔ)言是一種獨(dú)立的、非過程性語(yǔ)言,很難實(shí)現(xiàn)具有過程性控制的完整應(yīng)用系統(tǒng)。嵌入 式 sql 語(yǔ)言就是將 sql 語(yǔ)句直接嵌入到程序的源代碼中,與其他高級(jí)程序設(shè)計(jì)語(yǔ)言相結(jié) 合,使 sql 語(yǔ)句負(fù)責(zé)控制數(shù)

2、據(jù)庫(kù),高級(jí)語(yǔ)言負(fù)責(zé)控制程序流程,從而實(shí)現(xiàn)各種復(fù)雜應(yīng)用的 處理。 本文在基于 sql 技術(shù)的基礎(chǔ)上,介紹了嵌入式 sql 技術(shù)的發(fā)展、嵌入式 sql 語(yǔ)言以及嵌入式 sql 工作原理及流程,以 java 作為宿主語(yǔ)言,以 “圖書館管理系統(tǒng)” 的設(shè)計(jì)為例,描述了嵌入式 sql 技術(shù)的具體應(yīng)用,重點(diǎn)設(shè)計(jì)并實(shí)現(xiàn)了數(shù)據(jù)的檢索功能。 關(guān)鍵詞:關(guān)鍵詞: 嵌入式 sql;宿主語(yǔ)言;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國(guó)內(nèi)外的發(fā)展及現(xiàn)狀.1 1.3 課題研究的主要內(nèi)容.2 2 嵌入式 sql 技術(shù) .2 2.1 sql 和嵌入式 sql 簡(jiǎn)介.2 2.2 sql 語(yǔ)句.3 2.2.1 基本 sql 語(yǔ)句 .3 2.2.2 復(fù)雜 sql 語(yǔ)句 .4 2.3 嵌入式 sql 語(yǔ)句.6 2.4 嵌入式 sql 工作原理及流程 .6 2.5 嵌入式 sql 應(yīng)用 .7 2.5.1 宿主語(yǔ)言 j

7、ava 簡(jiǎn)介 .7 2.5.2 宿主語(yǔ)言 java db 引擎驅(qū)動(dòng).7 2.5.3 宿主語(yǔ)言 java 應(yīng)用程序接口jdbc .9 2.5.4 嵌入式 sql 應(yīng)用示例 .14 3 數(shù)據(jù)檢索功能的實(shí)現(xiàn).17 3.1 圖書管理系統(tǒng) .18 3.2 數(shù)據(jù)檢索功能的設(shè)計(jì) .18 3.2.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì).18 3.2.2 數(shù)據(jù)庫(kù)設(shè)計(jì).19 3.3 數(shù)據(jù)檢索功能的實(shí)現(xiàn) .21 總 結(jié) .26 致 謝 .27 參考文獻(xiàn): .28 1 1 緒論緒論 1.11.1課題背景課題背景 數(shù)據(jù)庫(kù)技術(shù)是現(xiàn)代信息科學(xué)與技術(shù)的重要組成部分,是計(jì)算機(jī)數(shù)據(jù)處 理與信息管理系統(tǒng)的核心。數(shù)據(jù)庫(kù)技術(shù)研究和解決了計(jì)算機(jī)信息處理過程中

8、 大量數(shù)據(jù)有效地組織和存儲(chǔ)的問題,在數(shù)據(jù)庫(kù)系統(tǒng)中減少數(shù)據(jù)存儲(chǔ)冗余、實(shí) 現(xiàn)數(shù)據(jù)共享、保障數(shù)據(jù)安全以及高效地檢索數(shù)據(jù)和處理數(shù)據(jù)。 隨著嵌入式系統(tǒng)軟件的發(fā)展,編程語(yǔ)言從 10 多年以前的匯編為主流發(fā) 展到現(xiàn)在 c、c+、java 為主流。另外,面向?qū)ο笤O(shè)計(jì)技術(shù)、組件技術(shù)等在嵌 入式系統(tǒng)軟件設(shè)計(jì)中的應(yīng)用也日益引起人們的重視。 嵌入式 sql(英文: embedded sql)是一種將 sql 語(yǔ)句直接寫入 c 語(yǔ)言, javal,fortran, ada 等編程語(yǔ)言的源代碼中的方法。借此方法,可使得應(yīng)用 程序擁有了訪問數(shù)據(jù)以及處理數(shù)據(jù)的能力。在這一方法中,將 sql 文嵌入的 目標(biāo)源碼的語(yǔ)言稱為宿主語(yǔ)

9、言。 1.21.2國(guó)內(nèi)外的發(fā)展及現(xiàn)狀國(guó)內(nèi)外的發(fā)展及現(xiàn)狀 隨著嵌入式 sql 技術(shù)的普遍使用,支持嵌入式 sql 的數(shù)據(jù)庫(kù)產(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 時(shí)被替換成了 pro*c/c+。之后 pro*c/c+ 到 oracle database 11g 仍都在被支持。 cobol pro*cobol 到 oracle database

10、 11g 仍都在被支持。 fortran pro*fortran 在 oracle 8 之后的 oracle 版本中就不再被更新,但 bug 修正 仍在維護(hù)中3。 pascal pro*pascal 在 oracle 8 之后的 oracle 版本中就不再被更新3。 pi/l pro*pl/i 自 oracle 8 之后就不再被更新,但文檔中仍然有記述3。 ibm db2 ibm db2 的版本 9 中提供了對(duì)于 c/c+,cobol,java 等宿主語(yǔ)言的嵌入式 sql 的支持。 postgresql c/c+ postgresql 自版本 6.3 起就提供了對(duì)于 c/c+的嵌入式 sql

11、的支持,以 ecpg 組件的形式存在。 1.31.3 課題研究課題研究的主要內(nèi)容的主要內(nèi)容 首先,本文簡(jiǎn)要的敘述了嵌入式 sql 的定義以及發(fā)展現(xiàn)狀,并詳細(xì)介紹 了嵌入式 sql 的數(shù)據(jù)檢索語(yǔ)句:基本嵌入式 sql 數(shù)據(jù)檢索功能語(yǔ)句和復(fù)雜嵌 入式 sql 數(shù)據(jù)檢索語(yǔ)句;然后,本文以 java 為宿主語(yǔ)言,重點(diǎn)分析嵌入式 sql 在宿主語(yǔ)言 java 中的工作原理和處理流程 ,以及對(duì) jdbc 驅(qū)動(dòng)和 jdbc api 做了詳細(xì)介紹;最后,針對(duì)嵌入式 sql 和宿主語(yǔ)言 java,以實(shí)例“圖書 館管理系統(tǒng)”演示嵌入式 sql 的具體應(yīng)用。 2 2 嵌入式嵌入式 sql 技術(shù)技術(shù) 2.12.1 s

12、ql 和嵌入式和嵌入式 sql 簡(jiǎn)介簡(jiǎn)介 sql(structured query language)結(jié)構(gòu)化查詢語(yǔ)言,是一種數(shù)據(jù)庫(kù)查詢 和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。 sql 是高級(jí)的非過程化編程語(yǔ)言,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它 不要求用戶指定對(duì)數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式, 所以具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫(kù)系統(tǒng),可以使用相同的 sql 語(yǔ)言作 為數(shù)據(jù)輸入與管理的接口。它以記錄集合作為操作對(duì)象,所有 sql 語(yǔ)句接受 集合作為輸入,返回集合作為輸出,這種集合特性允許一條 sql 語(yǔ)句的輸出 作為另一條 sql 語(yǔ)句的輸入,所以

13、sql 語(yǔ)句可以嵌套,這使他具有極大的靈 活性和強(qiáng)大的功能,在多數(shù)情況下,在其他語(yǔ)言中需要一大段程序?qū)崿F(xiàn)的功 能只需要一個(gè) sql 語(yǔ)句就可以達(dá)到目的,這也意味著用 sql 語(yǔ)言可以寫出非 常復(fù)雜的語(yǔ)句。 sql 語(yǔ)言包含 4 個(gè)部分: 數(shù)據(jù)定義語(yǔ)言(ddl),例如:create、drop、alter 等語(yǔ)句。 數(shù)據(jù)操作語(yǔ)言(dml),例如:insert(插入)、update(修改)、 delete(刪除)語(yǔ)句。 數(shù)據(jù)查詢語(yǔ)言(dql),例如:select 語(yǔ)句。 數(shù)據(jù)控制語(yǔ)言(dcl),例如:grant、revoke、commit、rollback 等 語(yǔ)句。 sql 語(yǔ)言包括三種主要程序設(shè)

14、計(jì)語(yǔ)言類別的語(yǔ)句:數(shù)據(jù)定義語(yǔ)言 (ddl),數(shù)據(jù)操作語(yǔ)言(dml)及數(shù)據(jù)控制語(yǔ)言(dcl)。 嵌入式 sql(英文: embedded sql)是一種將 sql 語(yǔ)句直接寫入 c 語(yǔ)言, cobol,fortran, java 等編程語(yǔ)言的源代碼中的方法。借此方法,可使得應(yīng) 用程序擁有了訪問數(shù)據(jù)以及處理數(shù)據(jù)的能力。在這一方法中,將 sql 文嵌入 的目標(biāo)源碼的語(yǔ)言稱為宿主語(yǔ)言。 在 sql 標(biāo)準(zhǔn)的 sql86(1986 年發(fā)布)中定義了對(duì)于 cobol, fortran, pi/l 等語(yǔ)言的嵌入式 sql 的規(guī)范。在 sql89(1989 年發(fā)布)規(guī)范中,定義了對(duì)于 c 語(yǔ)言的嵌入式 sql

15、的規(guī)范。一些大型的數(shù)據(jù)庫(kù)廠商發(fā)布的數(shù)據(jù)庫(kù)產(chǎn)品中,都 提供了對(duì)于嵌入式 sql 的支持。比如 oracle, db2 等。 2.22.2 sql 語(yǔ)句語(yǔ)句 2.2.12.2.1 基本基本 sqlsql 語(yǔ)句語(yǔ)句 簡(jiǎn)單嵌入式 sql 數(shù)據(jù)檢索功能語(yǔ)句表示只是對(duì)單表的數(shù)據(jù)檢索,其基 本語(yǔ)句為: “select from where group by having order by “ 例如: 查詢學(xué)號(hào)為“s040901106”學(xué)生的姓名 表 2-1,studentinfo 表相關(guān)數(shù)據(jù) stuidstunamedeptidsex s040201101 任非 02m s040901102 王情 02f

16、s040901103 戴麗 08f s040901106 鄭治 08m sql 語(yǔ)句: select stuname from studentinfo where stuid = s040901106; 2.2.12.2.1 復(fù)雜復(fù)雜 sqlsql 語(yǔ)句語(yǔ)句 然而現(xiàn)實(shí)數(shù)據(jù)庫(kù)項(xiàng)目中,對(duì)于數(shù)據(jù)庫(kù)的數(shù)據(jù)檢索可能設(shè)計(jì)有多個(gè)表,或要 求更復(fù)雜的數(shù)據(jù)檢索 sql 語(yǔ)句,所以有必要介紹幾種復(fù)雜的嵌入式 sql 數(shù)據(jù) 檢索語(yǔ)句。 3.2.13.2.1 聯(lián)接查詢聯(lián)接查詢 (一一)內(nèi)聯(lián)接內(nèi)聯(lián)接 內(nèi)連接查詢操作列出與連接條件匹配的數(shù)據(jù)行,它使用比較運(yùn)算符比較被連 接列的列值。內(nèi)連接分三種: 1、等值連接:在連接條件

17、中使用等于號(hào)(=)運(yùn)算符比較被連接列的列值,其查 詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。 2、不等連接: 在連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符比較被 連接的列的列值。這些運(yùn)算符包括、=、=、!和。 3、自然連接:在連接條件中使用等于(=)運(yùn)算符比較被連接列的列值,但它使 用選擇列表指出查詢結(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)連接時(shí),返回查詢結(jié)果集合中的僅是符合查詢條件( where 搜索條件或 having 條件)和連接條件的行。而采用外連接時(shí),它返回到查詢結(jié)果集合 中的不僅包含符合連接條件的行,而且還包括左表(左外連接時(shí))、右表(右外 連接時(shí))或兩個(gè)邊接表(全外

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 子句,它返回被連接的兩個(gè)表所有數(shù)據(jù)行的笛卡爾積, 返回到結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)乘以 第二個(gè)表中符合查詢

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 語(yǔ)句語(yǔ)句 (1)宿主變量 宿主變量就是在嵌入式 sql 語(yǔ)句中引用主語(yǔ)言說明的程序變量 如:在 java 語(yǔ)句中對(duì)程序變量:username、password 的進(jìn)行數(shù)據(jù)庫(kù)插入 操作 string sql = insert into reader(usernam

21、e,password) values( + username + , + password + ); 在嵌入式 sql 語(yǔ)句中使用宿主變量前,必須采用 “+username + ” 的形 式給宿主變量說明。 2.42.4 嵌入式嵌入式 sqlsql 工作原理及流程工作原理及流程 圖 2.1 數(shù)據(jù)庫(kù)產(chǎn)品中嵌入式 sql 操作流程圖 為了解決嵌入式 sql 源碼的處理流程問題,數(shù)據(jù)庫(kù)廠商需要提供一個(gè)嵌入 式 sql 的預(yù)編譯器,把包含有嵌入式 sql 文的宿主語(yǔ)言源碼轉(zhuǎn)換成純宿主語(yǔ)言 的代碼。這樣一來,源碼即可使用宿主語(yǔ)言對(duì)應(yīng)的編譯器進(jìn)行編譯。通常情況 下,經(jīng)過嵌入式 sql 的預(yù)編譯之后,原有的

22、嵌入式 sql 會(huì)被轉(zhuǎn)換成一系列函數(shù) 調(diào)用。因此,數(shù)據(jù)庫(kù)廠商還需要提供一些列函數(shù)庫(kù)(圖 2.1),以確保鏈接器能 夠把代碼中的函數(shù)調(diào)用與對(duì)應(yīng)的實(shí)現(xiàn)鏈接起來。 2.52.5 嵌入式嵌入式 sqlsql 應(yīng)用應(yīng)用 2.5.12.5.1 宿主語(yǔ)言宿主語(yǔ)言 javajava 簡(jiǎn)介簡(jiǎn)介 java,是由 sun microsystems 公司于 1995 年 5 月推出的 java 程序設(shè) 計(jì)語(yǔ)言和 java 平臺(tái)的總稱。用 java 實(shí)現(xiàn)的 hotjava 瀏覽器(支持 java applet)顯示了 java 的魅力:跨平臺(tái)、動(dòng)態(tài)的 web、internet 計(jì)算。從此, java 被廣泛接受并推動(dòng)了

23、 web 的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持 java applet。 java 項(xiàng)目運(yùn)行環(huán)境平臺(tái)(圖 2.2): 圖 2.2java 程序運(yùn)行環(huán)境平臺(tái)圖 2.5.22.5.2 宿主語(yǔ)言宿主語(yǔ)言 javajava dbdb 引擎驅(qū)動(dòng)引擎驅(qū)動(dòng) 眾所周知,在臺(tái)式機(jī)領(lǐng)域,db 是一個(gè)十分關(guān)鍵的基礎(chǔ)軟件。以往嵌入式 系統(tǒng)的軟件可能更側(cè)重于與硬件的交互與控制,但隨著對(duì)嵌入式系統(tǒng)功能需 求的日益復(fù)雜化,嵌入式系統(tǒng)軟件中,信息、數(shù)據(jù)的保存與管理的比重也日 應(yīng)用組件應(yīng)用組件應(yīng)用組件 .class 文件庫(kù) db 組件 jvm 益增加。在這樣的背景下,嵌入式系統(tǒng)軟件開發(fā)中,通過引入 db 組件,對(duì)實(shí) 現(xiàn)軟件整體框

24、架結(jié)構(gòu)的組件化與簡(jiǎn)單化,有著十分明顯而重要的意義。 db 引擎驅(qū)動(dòng)的總體框架(如圖 2.3):整個(gè) db 組件設(shè)計(jì)為 3 層結(jié)構(gòu),分 別為 jdbc 接口層、sql 解釋層和動(dòng)作執(zhí)行層。這 3 層之間呈單向依賴關(guān)系。 也就是說,sql 解釋層依賴于動(dòng)作執(zhí)行層,但動(dòng)作執(zhí)行層不依賴于其上面的兩 層,可以單獨(dú)存在而直接被使用。如果用戶以使用方便為主要目的,可采用 完全配置方式,應(yīng)用程序通過 jdbc 接口層存取數(shù)據(jù)。反之,如果用戶對(duì)空間 和效率要求較高,可僅配置動(dòng)作執(zhí)行層組件,應(yīng)用程序直接調(diào)用動(dòng)作執(zhí)行層 的 api 進(jìn)行數(shù)據(jù)的檢過和更新等操作。 圖 2.3 db 引擎驅(qū)動(dòng)的總體框架圖 (1)jdbc

25、 接口層 如前文所述是可選組件,旨在為應(yīng)用程序提供一個(gè)標(biāo)準(zhǔn)的 db 調(diào)用接口。 (2)sql 解釋層 本 db 組件實(shí)現(xiàn)的 sql 解釋層,只實(shí)現(xiàn)了標(biāo)準(zhǔn) sql 的一個(gè)小子集,主要完 成 select、delete、insert、update、create table、drop table 等功能。 其中數(shù)據(jù)操作語(yǔ)句(select、delete、insert、update)的解釋要點(diǎn)之一是 where 條件子句的解釋執(zhí)行,類似于數(shù)學(xué)表達(dá)式求值算法。 jdbc 接口層 sql 解釋層 動(dòng)作執(zhí)行層 jvm (3)動(dòng)作執(zhí)行層 動(dòng)作執(zhí)行層是整個(gè) db 組件的核心和關(guān)鍵,因?yàn)樗械?db 操作最終都由

26、該層完成,同時(shí)用戶也可以跳過上面的兩層,直接調(diào)用該層的 api,以實(shí)現(xiàn)相 同的數(shù)據(jù)操作功能。 2.5.32.5.3 宿主語(yǔ)言宿主語(yǔ)言 javajava 應(yīng)用程序接口應(yīng)用程序接口jdbcjdbc (1) jdbc 介紹 jdbc(java data base connectivity,java 數(shù)據(jù)庫(kù)連接)是一種用于執(zhí) 行 sql 語(yǔ)句的 java api(如圖 2.6、圖 2.7),可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng) 一訪問,它由一組用 java 語(yǔ)言編寫的類和接口組成。jdbc 為工具/數(shù)據(jù)庫(kù)開 發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的 api,據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù) 開發(fā)人員能夠用純 java a

27、pi 編寫數(shù)據(jù)庫(kù)應(yīng)用程序。 java 數(shù)據(jù)庫(kù)連接體系結(jié)構(gòu)是用于 java 應(yīng)用程序連接數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)方法。 jdbc 對(duì) java 程序員而言是 api,對(duì)實(shí)現(xiàn)與數(shù)據(jù)庫(kù)連接的服務(wù)提供商而言是接 口模型。作為 api,jdbc 為程序開發(fā)提供標(biāo)準(zhǔn)的接口,并為數(shù)據(jù)庫(kù)廠商及第 三方中間件廠商實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接提供了標(biāo)準(zhǔn)方法(如圖 2.4)。jdbc 使 用已有的 sql 標(biāo)準(zhǔn)并支持與其它數(shù)據(jù)庫(kù)連接標(biāo)準(zhǔn),如 odbc 之間的橋接。jdbc 實(shí)現(xiàn)了所有這些面向標(biāo)準(zhǔn)的目標(biāo)并且具有簡(jiǎn)單、嚴(yán)格類型定義且高性能實(shí)現(xiàn) 的接口。 java 具有堅(jiān)固、安全、易于使用、易于理解和可從網(wǎng)絡(luò)上自動(dòng)下載等 特性,是編寫數(shù)據(jù)庫(kù)應(yīng)

28、用程序的杰出語(yǔ)言。所需要的只是 java 應(yīng)用程序與各 種不同數(shù)據(jù)庫(kù)之間進(jìn)行對(duì)話的方法。而 jdbc 正是作為此種用途的機(jī)制。 jdbc 擴(kuò)展了 java 的功能。例如,用 java 和 jdbc api 可以發(fā)布含 有 applet 的網(wǎng)頁(yè),而該 applet 使用的信息可能來自遠(yuǎn)程數(shù)據(jù)庫(kù)。企業(yè)也 可以用 jdbc 通過 intranet 將所有職員連到一個(gè)或多個(gè)內(nèi)部數(shù)據(jù)庫(kù)中(即 使這些職員所用的計(jì)算機(jī)有 windows、 macintosh 和 unix 等各種不同的操 作系統(tǒng))。隨著越來越多的程序員開始使用 java 編程語(yǔ)言,對(duì)從 java 中便 捷地訪問數(shù)據(jù)庫(kù)的要求也在日益增加。 圖

29、 2.4.jdbc 框架圖 (2) jdbc 驅(qū)動(dòng)類型 圖 2.5jdbc 驅(qū)動(dòng)類型說明圖 jdbc-odbc 橋(jdbc-odbc bridge)(圖 2.5) jdbc 調(diào)用odbc 調(diào)用。要求 odbc 代碼、client 端代碼 都要在客戶機(jī)上安裝。 本地 api 部分 java 驅(qū)動(dòng)(native-api partly-java driver) jdbc 調(diào)用 數(shù)據(jù)庫(kù)的 client 端 api,也需要在客戶機(jī)上 安裝代碼。 網(wǎng)絡(luò)協(xié)議完全 java 驅(qū)動(dòng)(jdbc-net pure java driver) jdbc 調(diào)用 獨(dú)立于任何 dbms 的網(wǎng)絡(luò)協(xié)議,該協(xié)議 將由另外一個(gè)服務(wù)

30、器轉(zhuǎn)換為某種 dbms 協(xié)議。 本地協(xié)議完全 java 驅(qū)動(dòng)(native-protocol pure java driver) jdbc 調(diào)用 特定 dbms 的網(wǎng)絡(luò)協(xié)議。 (3) jdbc api jdbc api 功能: 建立與數(shù)據(jù)庫(kù)的連接 發(fā)送 sql 語(yǔ)句 處理結(jié)果 (1 1)jdbcjdbc apiapi 類:類: 圖 2.6 jdbc api 所涉及的類圖 (2)jdbc 類層次:類層次: 圖 2.7 jdbc api 類層次圖 (3 3)建立數(shù)據(jù)庫(kù)的連接:)建立數(shù)據(jù)庫(kù)的連接: jdbc 的 drivermanager 查找到相應(yīng)的數(shù)據(jù)庫(kù) driver 并裝載。 從系統(tǒng)屬性 ja

31、va.sql 中讀取 driver 的類名,并一一注冊(cè)。 在程序中使用 class.forname( )方法動(dòng)態(tài)裝載并注冊(cè) driver。 如 class.forname(“sun.jdbc.odbc.jdbcodbcdriver”), 注冊(cè) jdbc-odbc 橋。 通過 drivermanager.getconnection( )與數(shù)據(jù)庫(kù)建立連接 數(shù)據(jù)庫(kù)連接串 url,指定數(shù)據(jù)源以及使用的數(shù)據(jù)庫(kù)訪問 協(xié)議。 語(yǔ)法格式:jdbc: 例:通過 jdbc-odbc 橋接驅(qū)動(dòng)與 wombat 數(shù)據(jù)源建立連接。 connection con = drivermanager.getconnection

32、(“jdbc:odbc: wombat”,”username”,”password”); (4 4)傳送)傳送 sqlsql 語(yǔ)句:語(yǔ)句: 在數(shù)據(jù)庫(kù)連接上創(chuàng)建 statement 對(duì)象,將各種 sql 語(yǔ)句 發(fā)送到所連接的數(shù)據(jù)庫(kù)。 /* 傳送 sql 語(yǔ)句并得到結(jié)果集 rs */ statement stmt = con.createstatement( ); resultset rs = stmt.executequery(“ select a, b, c from table1”); 對(duì)于多次執(zhí)行但參數(shù)不同的 sql 語(yǔ)句,可以使用 preparedstatement 對(duì)象。 使用 cal

33、lablestatement 對(duì)象調(diào)用數(shù)據(jù)庫(kù)上的存儲(chǔ)過程。 (5 5)處理結(jié)果集:)處理結(jié)果集: 結(jié)果集是查詢語(yǔ)句返回的數(shù)據(jù)庫(kù)記錄的集合。 在結(jié)果集中通過游標(biāo)(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 語(yǔ)言中嵌入 sql 的處理流程。 圖 2.8 用戶登陸界面 圖 2.9 用戶登陸后操作界面 系統(tǒng)以用戶登陸界面的初始界面,根據(jù)用戶輸入的用戶名和密碼,使用 gettext()方法獲取用戶輸入的值,并賦值給 java 定義變量“user”、 “pass”,利用 sql 語(yǔ)句結(jié)合變量對(duì)數(shù)據(jù)庫(kù)中的表 user 進(jìn)行數(shù)據(jù)匹配,用戶 只有在輸入與數(shù)據(jù)庫(kù)相匹配的用戶名和密碼時(shí),才能登陸系統(tǒng),進(jìn)如圖 2.9 用 戶操作界面 具體sql語(yǔ)句:select * from user where name= + +

35、 user+ and pass= + + pass + ; 部分代碼展示:部分代碼展示: 登陸時(shí)對(duì)數(shù)據(jù)庫(kù)的操作: 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ù)庫(kù)中查詢 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; / 記錄當(dāng)前用戶 / 進(jìn)入主界面 main main = new main(); main.setpurview(byte) is_admin); this.dispose(); catch (exception ex) ex.printstacktrace(); 連接數(shù)據(jù)庫(kù)部分: / 構(gòu)造方法,創(chuàng)建數(shù)據(jù)庫(kù)連接 private basedao() try if (conn = null) class.forname(driver); / 加載數(shù)據(jù)庫(kù)驅(qū)動(dòng) co

38、nn = drivermanager.getconnection(url, dbuser, dbpwd); / 建立數(shù)據(jù)庫(kù)連接 else return; catch (exception ee) ee.printstacktrace(); 實(shí)際查詢操作部分: / 執(zhí)行數(shù)據(jù)庫(kù)查詢操作 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ù)庫(kù)查詢 catch (sqlexception e) e.printstacktrace(); return null; 3 3 數(shù)據(jù)檢索功能的實(shí)現(xiàn)數(shù)據(jù)檢索功能的實(shí)現(xiàn) 本章以“圖書館管理系統(tǒng)”為例,介紹圖書館系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和數(shù)據(jù)庫(kù)設(shè)計(jì), 重點(diǎn)針對(duì)系統(tǒng)的“查詢管理”模塊的“圖書信息查詢”進(jìn)行說明分析。 3.13.1 圖書管理系統(tǒng)圖書管理系統(tǒng) 圖書館作為一種信息資源的集散地,圖書和用戶借閱資料繁多,包含很 多的信息數(shù)據(jù)的管理,現(xiàn)今,有很多的圖書館都是初步開始使用,甚至尚未 使用計(jì)算機(jī)進(jìn)行信息管理。根據(jù)調(diào)查得知,他們以

40、前對(duì)信息管理的主要方式 是基于文本、表格等紙介質(zhì)的手工處理,對(duì)于圖書借閱情況(如借書天數(shù)、 超過限定借書時(shí)間的天數(shù))的統(tǒng)計(jì)和核實(shí)等往往采用對(duì)借書卡的人工檢查進(jìn) 行,對(duì)借閱者的借閱權(quán)限、以及借閱天數(shù)等用人工計(jì)算、手抄進(jìn)行。數(shù)據(jù)信 息處理工作量大,容易出錯(cuò);由于數(shù)據(jù)繁多,容易丟失,且不易查找??偟?來說,缺乏系統(tǒng),規(guī)范的信息管理手段。盡管有的圖書館有計(jì)算機(jī),但是尚 未用于信息管理,沒有發(fā)揮它的效力,資源閑置比較突出,這就是管理信息 系統(tǒng)的開發(fā)的基本環(huán)境。 數(shù)據(jù)處理手工操作,工作量大,出錯(cuò)率高,出錯(cuò)后不易更改。圖書館采 取手工方式對(duì)圖書借閱情況進(jìn)行人工管理,由于信息比較多,圖書借閱信息 的管理工作混

41、亂而又復(fù)雜;一般借閱情況是記錄在借書證上,圖書的數(shù)目和 內(nèi)容記錄在文件中,圖書館的工作人員和管理員也只是當(dāng)時(shí)對(duì)它比較清楚, 時(shí)間一長(zhǎng),如再要進(jìn)行查詢,就得在眾多的資料中翻閱、查找了,造成查詢 費(fèi)時(shí)、費(fèi)力。如要對(duì)很長(zhǎng)時(shí)間以前的圖書進(jìn)行更改就更加困難了。 本系統(tǒng)以研究 java 嵌入 sql 為目的實(shí)現(xiàn)圖書館的基本功能:用戶登陸、 圖書管理、用戶管理、用戶借書還書管理。 3.23.2 數(shù)據(jù)檢索功能的設(shè)計(jì)數(shù)據(jù)檢索功能的設(shè)計(jì) 3.2.13.2.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)系統(tǒng)結(jié)構(gòu)設(shè)計(jì) 本系統(tǒng)使用對(duì)象為圖書館管理員。其中包括基本的信息維護(hù)、用戶的 借還書管理、數(shù)據(jù)檢索和系統(tǒng)管理四大模塊。 錯(cuò)誤用戶名或密碼 系統(tǒng)主頁(yè)

42、面 借還管理 基礎(chǔ)維護(hù)菜單 查詢管理 系統(tǒng)維護(hù) 用戶信息 圖書維護(hù) 借書 還書 圖書查詢 用戶查詢 密碼修改 退出系統(tǒng) 新增用戶信息 刪除用戶信息 修改用戶信息 新增圖書信息 刪除圖書信息 修改圖書信息 管理員登陸 登陸 登陸失敗 圖 3.1 總體設(shè)計(jì)架構(gòu) 3.2.23.2.2 數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)設(shè)計(jì) 本系統(tǒng)數(shù)據(jù)庫(kù)使用的是 mysql 數(shù)據(jù)庫(kù),使用該數(shù)據(jù)庫(kù)是因?yàn)楸緮?shù)據(jù)庫(kù)的使 用方便性。首先建立一個(gè)數(shù)據(jù)庫(kù)名為 library,在其中建立四個(gè)信息表,通過 輸入數(shù)據(jù)建立表或者直接建立空表并設(shè)置字段名和數(shù)據(jù)類型。建立的四個(gè)表分 別為用戶信息表、圖書信息表、借還書信息表、管理員信息表。數(shù)據(jù)庫(kù)具體設(shè) 計(jì)如表

43、 3-1,3-2,3-3,3-4 所示: 表 3-1 用戶信息表(user) 字段名數(shù)據(jù)類型可否為空說明 idint(100) 不可自動(dòng)編號(hào) namevarchar(20) 不可用戶名 typevarchar(20) 不可用戶角色 sexvarchar(20) 不可性別 max_numvarchar(20) 不可最大借書數(shù) days_numvarchar(20) 不可結(jié)束天數(shù) 表 3-2 圖書息表(book) 字段名數(shù)據(jù)類型可否為空說明 idint(100) 不可圖書編號(hào) namevarchar(20) 不可圖書名 typevarchar(20) 不可種類 authorvarchar(20)

44、不可作者 translatorvarchar(20) 不可翻譯者 publishervarchar(20) 不可出版社 publish_timevarchar(20) 不可出版時(shí)間 pricevarchar(20) 不可價(jià)格 stockvarchar(20) 不可狀態(tài) 表 3-3 借還書信息表(borrow) 字段名數(shù)據(jù)類型可否為空說明 book_idvarchar(20) 不可圖書編號(hào) reader_idvarchar(20) 不可讀者 id borrow_datevarchar(20) 不可借書時(shí)間 back_datevarchar(20) 不可還書時(shí)間 is_backint(10) 不可

45、是否歸還 idint(100) 不可自動(dòng)編號(hào) 表 3-4 管理員信息表(user) 字段名數(shù)據(jù)類型可否為空說明 idint(100) 不可自動(dòng)編號(hào) namevarchar(20) 不可管理員用戶名 passvarchar(20) 不可借用戶密碼 is_adminint(10) 不可是否為管理員 3.33.3 數(shù)據(jù)檢索功能的實(shí)現(xiàn)數(shù)據(jù)檢索功能的實(shí)現(xiàn) 該部分以系統(tǒng)查詢圖書信息模塊為例,重點(diǎn)演示說明在宿主語(yǔ)言 java 中 嵌入 sql 實(shí)現(xiàn)對(duì)書籍?dāng)?shù)據(jù)的檢索。 圖 3.2 圖書信息查詢操作界面(1) 圖 3.3 圖書信息查詢操作界面(2) 用戶以正確匹配的用戶名和密碼登陸系統(tǒng)后,點(diǎn)擊“查詢管理”進(jìn) 入

46、“圖書查詢”,可出現(xiàn)圖 3.3,。 該部分圖書檢索功能以圖書編號(hào)為檢索條件,輸入“圖書編號(hào)”,點(diǎn)擊 查詢即可查找相應(yīng)的圖書信息,程序?qū)崿F(xiàn)中,在查詢圖書的方法 bookquery 內(nèi)設(shè)置“圖書編號(hào)”變量“id”,通過 string id = tf_id.gettext();獲取 用戶輸入的圖書編號(hào) ,最后通過對(duì) sql 語(yǔ)句的執(zhí)行,獲取所要檢索的圖書信 息 sql 語(yǔ)句: string sql = select * from book; if (id != null 部分代碼展示:部分代碼展示: 連接數(shù)據(jù)庫(kù)部分: / 構(gòu)造方法,創(chuàng)建數(shù)據(jù)庫(kù)連接 private basedao() try if (

47、conn = null) class.forname(driver); / 加載數(shù)據(jù)庫(kù)驅(qū)動(dòng) conn = drivermanager.getconnection(url, dbuser, dbpwd); / 建立數(shù)據(jù)庫(kù)連接 else return; catch (exception ee) ee.printstacktrace(); 前臺(tái)實(shí)現(xiàn)數(shù)據(jù)檢索的方法: private void btn_cxactionperformed(actionevent e) string id = tf_id.gettext(); / 獲取圖書編號(hào) / 根據(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ù)庫(kù)查詢操作 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ù)庫(kù)查詢 catch (sqlexception e) e.printstacktrace(); return null; 獲取最后書籍?dāng)?shù)據(jù)信息: /獲得滿足sql語(yǔ)句的圖書實(shí)體列表 public static list selectbooklist(string sql) list list = new arraylist(); resu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論