畢業(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)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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) 師 姓 名 二 一一年 六 月皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))基于嵌入式基于嵌入式 sqlsql 技術(shù)數(shù)據(jù)檢索功能的實(shí)現(xiàn)技術(shù)數(shù)據(jù)檢索功能的實(shí)現(xiàn)作 者 指導(dǎo)教師 摘要摘要:sql 是面向集合的描述性語(yǔ)言,具有功能強(qiáng)、效率高、使用靈活等特點(diǎn),而單純的 sql 語(yǔ)言是一種獨(dú)立的、非過(guò)程性語(yǔ)言,很難實(shí)現(xiàn)具有過(guò)程性控制的完整應(yīng)用系統(tǒng)。嵌入式 sql 語(yǔ)言就是將 sql 語(yǔ)句直接嵌入到程序的源代碼中,與其他高級(jí)程序設(shè)計(jì)語(yǔ)言相結(jié)合,使 sql 語(yǔ)

2、句負(fù)責(zé)控制數(shù)據(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 technologyabstract: sql is a descriptive la

3、nguage 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 s

4、ource 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 techn

5、ology, 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

6、 data retrieval functions. keykey words:words: embedded sql ; host language ; java ;jdbc皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))目目 錄錄1 緒論.11.1課題背景.11.2國(guó)內(nèi)外的發(fā)展及現(xiàn)狀.11.3 課題研究的主要內(nèi)容.22 嵌入式 sql 技術(shù) .22.1 sql 和嵌入式 sql 簡(jiǎn)介.22.2 sql 語(yǔ)句.32.2.1 基本 sql 語(yǔ)句 .32.2.2 復(fù)雜 sql 語(yǔ)句 .42.3 嵌入式 sql 語(yǔ)句.62.4 嵌入式 sql 工作原理及流程 .62.5 嵌入式 sql 應(yīng)用 .72.5.1 宿主語(yǔ)言

7、 java 簡(jiǎn)介 .72.5.2 宿主語(yǔ)言 java db 引擎驅(qū)動(dòng).72.5.3 宿主語(yǔ)言 java 應(yīng)用程序接口jdbc .92.5.4 嵌入式 sql 應(yīng)用示例 .143 數(shù)據(jù)檢索功能的實(shí)現(xiàn).173.1 圖書管理系統(tǒng) .183.2 數(shù)據(jù)檢索功能的設(shè)計(jì) .183.2.1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì).183.2.2 數(shù)據(jù)庫(kù)設(shè)計(jì).193.3 數(shù)據(jù)檢索功能的實(shí)現(xiàn) .21總 結(jié) .26致 謝 .27參考文獻(xiàn): .28皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 1 頁(yè)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、息處理過(guò)程中大量數(shù)據(jù)有效地組織和存儲(chǔ)的問(wèn)題,在數(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)用程序擁有了訪問(wèn)數(shù)據(jù)以及處理數(shù)據(jù)的能力。在這一方法中,將 sql 文嵌入的目標(biāo)源碼的語(yǔ)言稱為宿主語(yǔ)言。1

9、.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 databaseada pro*ada 在 oracle 7.3 的版本中被加入產(chǎn)品族,并且在 oracle 8 中被替換為sql*module。但在此之后就一直沒(méi)有更新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 11g 仍都在被支

10、持。fortran pro*fortran 在 oracle 8 之后的 oracle 版本中就不再被更新,但 bug 修正仍在維護(hù)中3。皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 2 頁(yè)pascal pro*pascal 在 oracle 8 之后的 oracle 版本中就不再被更新3。pi/l pro*pl/i 自 oracle 8 之后就不再被更新,但文檔中仍然有記述3。ibm db2ibm db2 的版本 9 中提供了對(duì)于 c/c+,cobol,java 等宿主語(yǔ)言的嵌入式sql 的支持。postgresqlc/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 sql 和嵌入式和嵌

12、入式 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í)的非過(guò)程化編程語(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ǔ)句的輸入,所以 sql 語(yǔ)句可以嵌套,這使他具有極

13、大的靈皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 3 頁(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è)計(jì)語(yǔ)言類

14、別的語(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)用程序擁有了訪問(wèn)數(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 的規(guī)范。一些大型的數(shù)據(jù)庫(kù)

15、廠商發(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é)院本科畢業(yè)論文(設(shè)計(jì))第 4 頁(yè)查詢學(xué)號(hào)為“s040901106”學(xué)生的姓名表 2-1,studentinfo 表相關(guān)數(shù)據(jù)stuidstunamedeptidsexs040201101任非02ms040901102王情02fs0409011

16、03戴麗08fs040901106鄭治08msql 語(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、等值連接:在連接條件中使用等于號(hào)(=)運(yùn)算符比較被連接列的列

17、值,其查詢結(jié)果中列出被連接表中的所有列,包括其中的重復(fù)列。2、不等連接: 在連接條件使用除等于運(yùn)算符以外的其它比較運(yùn)算符比較被連接的列的列值。這些運(yùn)算符包括、=、=、!和。3、自然連接:在連接條件中使用等于(=)運(yùn)算符比較被連接列的列值,但它使用選擇列表指出查詢結(jié)果集合中所包括的列,并刪除連接表中的重復(fù)列。例,下面使用等值連接列出 authors 和 publishers 表中位于同一城市的作者和皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 5 頁(yè)出版社:select *from authors as a inner join publishers as pon a.city=p.city 又如使用自然連接

18、,在選擇列表中刪除 authors 和 publishers 表中重復(fù)列(city和 state):select a.*,p.pub_id,p.pub_name,p.countryfrom authors as a inner join publishers as pon a.city=p.city(二二)外連接外連接內(nèi)連接時(shí),返回查詢結(jié)果集合中的僅是符合查詢條件( where 搜索條件或 having 條件)和連接條件的行。而采用外連接時(shí),它返回到查詢結(jié)果集合中的不僅包含符合連接條件的行,而且還包括左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)邊接表(全外連接)中的所有數(shù)據(jù)行。如下面使用左外連

19、接將論壇內(nèi)容和作者信息連接起來(lái):select a.*,b.* from luntan left join usertable as bon a.username=b.username以及他們所在的城市:select a.*,b.* from city as a full outer join user as bon a.username=b.username(三三)交叉連接交叉連接交叉連接不帶 where 子句,它返回被連接的兩個(gè)表所有數(shù)據(jù)行的笛卡爾積,返回到結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢條件的數(shù)據(jù)行數(shù)。例,titles 表中有 6 類圖書,而

20、publishers 表中有 8 家出版社,則下列交叉連接檢索到的記錄數(shù)將等于 6*8=48 行。select type,pub_namefrom titles cross join publishersorder by type皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 6 頁(yè)2.32.3 嵌入式嵌入式 sql 語(yǔ)句語(yǔ)句 (1)宿主變量宿主變量就是在嵌入式 sql 語(yǔ)句中引用主語(yǔ)言說(shuō)明的程序變量如:在 java 語(yǔ)句中對(duì)程序變量:username、password 的進(jìn)行數(shù)據(jù)庫(kù)插入操作string sql = insert into reader(username,password) values(+

21、username+ ,+ password+ );在嵌入式 sql 語(yǔ)句中使用宿主變量前,必須采用 “+username + ” 的形式給宿主變量說(shuō)明。2.42.4 嵌入式嵌入式 sqlsql 工作原理及流程工作原理及流程圖 2.1 數(shù)據(jù)庫(kù)產(chǎn)品中嵌入式 sql 操作流程圖為了解決嵌入式 sql 源碼的處理流程問(wèn)題,數(shù)據(jù)庫(kù)廠商需要提供一個(gè)嵌入式 sql 的預(yù)編譯器,把包含有嵌入式 sql 文的宿主語(yǔ)言源碼轉(zhuǎn)換成純宿主語(yǔ)言的代碼。這樣一來(lái),源碼即可使用宿主語(yǔ)言對(duì)應(yīng)的編譯器進(jìn)行編譯。通常情況下,經(jīng)過(guò)嵌入式 sql 的預(yù)編譯之后,原有的嵌入式 sql 會(huì)被轉(zhuǎn)換成一系列函數(shù)皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第

22、 7 頁(yè)調(diào)用。因此,數(shù)據(jù)庫(kù)廠商還需要提供一些列函數(shù)庫(kù)(圖 2.1),以確保鏈接器能夠把代碼中的函數(shù)調(diào)用與對(duì)應(yīng)的實(shí)現(xiàn)鏈接起來(lái)。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)了 web 的迅速發(fā)展,常用的瀏覽器現(xiàn)在

23、均支持 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皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 8 頁(yè)益增加。在這樣的背景下,嵌入式系統(tǒng)軟件開發(fā)中,通過(guò)引入 db 組件,對(duì)實(shí)現(xiàn)軟件整體框架結(jié)構(gòu)的組件化與

24、簡(jiǎn)單化,有著十分明顯而重要的意義。db 引擎驅(qū)動(dòng)的總體框架(如圖 2.3):整個(gè) db 組件設(shè)計(jì)為 3 層結(jié)構(gòu),分別為 jdbc 接口層、sql 解釋層和動(dòng)作執(zhí)行層。這 3 層之間呈單向依賴關(guān)系。也就是說(shuō),sql 解釋層依賴于動(dòng)作執(zhí)行層,但動(dòng)作執(zhí)行層不依賴于其上面的兩層,可以單獨(dú)存在而直接被使用。如果用戶以使用方便為主要目的,可采用完全配置方式,應(yīng)用程序通過(guò) jdbc 接口層存取數(shù)據(jù)。反之,如果用戶對(duì)空間和效率要求較高,可僅配置動(dòng)作執(zhí)行層組件,應(yīng)用程序直接調(diào)用動(dòng)作執(zhí)行層的 api 進(jìn)行數(shù)據(jù)的檢過(guò)和更新等操作。 圖 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皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 9 頁(yè)(3)動(dòng)作執(zhí)行層動(dòng)作執(zhí)行層是整個(gè) db 組件的核心和關(guān)鍵,因?yàn)樗械?db 操作最終都由該層完成,同時(shí)

26、用戶也可以跳過(guò)上面的兩層,直接調(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)一訪問(wèn),它由一組用 java 語(yǔ)言編寫的類和接口組成。jdbc 為工具/數(shù)據(jù)庫(kù)開發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的 api,據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開發(fā)人員能夠用純 java api 編寫數(shù)據(jù)庫(kù)應(yīng)用程序

27、。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)用程序的杰出語(yǔ)言。所需要的只是 java

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

29、bc 框架圖(2) jdbc 驅(qū)動(dòng)類型 圖 2.5jdbc 驅(qū)動(dòng)類型說(shuō)明圖 jdbc-odbc 橋(jdbc-odbc bridge)(圖 2.5) jdbc 調(diào)用odbc 調(diào)用。要求 odbc 代碼、client 端代碼 都要在客戶機(jī)上安裝。 皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 11 頁(yè) 本地 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é)議

30、,該協(xié)議 將由另外一個(gè)服務(wù)器轉(zhuǎn)換為某種 dbms 協(xié)議。 本地協(xié)議完全 java 驅(qū)動(dòng)(native-protocol pure java driver) jdbc 調(diào)用 特定 dbms 的網(wǎng)絡(luò)協(xié)議。(3) jdbc apijdbc api 功能: 建立與數(shù)據(jù)庫(kù)的連接 發(fā)送 sql 語(yǔ)句 處理結(jié)果皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 12 頁(yè)(1 1)jdbcjdbc apiapi 類:類:圖 2.6 jdbc api 所涉及的類圖 (2)jdbc 類層次:類層次: 圖 2.7 jdbc api 類層次圖(3 3)建立數(shù)據(jù)庫(kù)的連接:)建立數(shù)據(jù)庫(kù)的連接:皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 13 頁(yè) jdb

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

32、nection con = drivermanager.getconnection(“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

33、語(yǔ)句,可以使用preparedstatement 對(duì)象。皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 14 頁(yè) 使用 callablestatement 對(duì)象調(diào)用數(shù)據(jù)庫(kù)上的存儲(chǔ)過(guò)程。(5 5)處理結(jié)果集:)處理結(jié)果集: 結(jié)果集是查詢語(yǔ)句返回的數(shù)據(jù)庫(kù)記錄的集合。 在結(jié)果集中通過(guò)游標(biāo)(cursor)控制具體記錄的訪問(wèn)。 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 = getflo

34、at(“c”);stmt.close( );con.close( ) 2.5.42.5.4 嵌入式嵌入式 sqlsql 應(yīng)用示例應(yīng)用示例 本節(jié)以圖書館管理系統(tǒng)的部分功能模塊為例,演示說(shuō)明 java 語(yǔ)言中嵌入sql 的處理流程。皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 15 頁(yè) 圖 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í),才

35、能登陸系統(tǒng),進(jìn)如圖 2.9 用戶操作界面具體sql語(yǔ)句:select * from user where name= + + 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;皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 16 頁(yè)/ 未

36、輸入用戶名if (user.equals() joptionpane.showmessagedialog(this, 用戶名不允許為空!);return;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_adm

37、in);basedao.close(); else joptionpane.showmessagedialog(this, 用戶名或密碼不正確!);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) 皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 17 頁(yè)ex.printstacktrace();連接數(shù)據(jù)庫(kù)部分:/ 構(gòu)造方法,創(chuàng)建數(shù)據(jù)庫(kù)連接

38、private basedao() try if (conn = null) class.forname(driver); / 加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)conn = drivermanager.getconnection(url, dbuser, dbpwd); / 建立數(shù)據(jù)庫(kù)連接 elsereturn; catch (exception ee) ee.printstacktrace();實(shí)際查詢操作部分:/ 執(zhí)行數(shù)據(jù)庫(kù)查詢操作public static resultset executequery(string sql) try if (conn = null)new basedao();return

39、 conn.createstatement(resultset.type_scroll_sensitive,resultset.concur_updatable).executequery(sql); / 執(zhí)行皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 18 頁(yè)數(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)行說(shuō)明分析。3.13.1 圖書管理系統(tǒng)圖書管理系統(tǒng)圖書館作為一種信

40、息資源的集散地,圖書和用戶借閱資料繁多,包含很多的信息數(shù)據(jù)的管理,現(xiàn)今,有很多的圖書館都是初步開始使用,甚至尚未使用計(jì)算機(jī)進(jìn)行信息管理。根據(jù)調(diào)查得知,他們以前對(duì)信息管理的主要方式是基于文本、表格等紙介質(zhì)的手工處理,對(duì)于圖書借閱情況(如借書天數(shù)、超過(guò)限定借書時(shí)間的天數(shù))的統(tǒng)計(jì)和核實(shí)等往往采用對(duì)借書卡的人工檢查進(jìn)行,對(duì)借閱者的借閱權(quán)限、以及借閱天數(shù)等用人工計(jì)算、手抄進(jìn)行。數(shù)據(jù)信息處理工作量大,容易出錯(cuò);由于數(shù)據(jù)繁多,容易丟失,且不易查找??偟膩?lái)說(shuō),缺乏系統(tǒng),規(guī)范的信息管理手段。盡管有的圖書館有計(jì)算機(jī),但是尚未用于信息管理,沒(méi)有發(fā)揮它的效力,資源閑置比較突出,這就是管理信息系統(tǒng)的開發(fā)的基本環(huán)境。數(shù)據(jù)

41、處理手工操作,工作量大,出錯(cuò)率高,出錯(cuò)后不易更改。圖書館采取手工方式對(duì)圖書借閱情況進(jìn)行人工管理,由于信息比較多,圖書借閱信息的管理工作混亂而又復(fù)雜;一般借閱情況是記錄在借書證上,圖書的數(shù)目和內(nèi)容記錄在文件中,圖書館的工作人員和管理員也只是當(dāng)時(shí)對(duì)它比較清楚,時(shí)間一長(zhǎng),如再要進(jìn)行查詢,就得在眾多的資料中翻閱、查找了,造成查詢費(fèi)時(shí)、費(fèi)力。如要對(duì)很長(zhǎng)時(shí)間以前的圖書進(jìn)行更改就更加困難了。皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 19 頁(yè)本系統(tǒng)以研究 java 嵌入 sql 為目的實(shí)現(xiàn)圖書館的基本功能:用戶登陸、圖書管理、用戶管理、用戶借書還書管理。3.23.2 數(shù)據(jù)檢索功能的設(shè)計(jì)數(shù)據(jù)檢索功能的設(shè)計(jì) 3.2.13.

42、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è)面借還管理基礎(chǔ)維護(hù)菜單 查詢管理 系統(tǒng)維護(hù)用戶信息圖書維護(hù)借書 還書圖書查詢用戶查詢密碼修改退出系統(tǒng) 新增用戶信息 刪除用戶信息 修改用戶信息 新增圖書信息 刪除圖書信息修改圖書信息管理員登陸登陸登陸失敗皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 20 頁(yè)圖 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,在其中

43、建立四個(gè)信息表,通過(guò)輸入數(shù)據(jù)建立表或者直接建立空表并設(shè)置字段名和數(shù)據(jù)類型。建立的四個(gè)表分別為用戶信息表、圖書信息表、借還書信息表、管理員信息表。數(shù)據(jù)庫(kù)具體設(shè)計(jì)如表 3-1,3-2,3-3,3-4 所示:表 3-1 用戶信息表(user)字段名數(shù)據(jù)類型可否為空說(shuō)明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ù)類型可否為空說(shuō)明idint(100)不可圖書

44、編號(hào)namevarchar(20)不可圖書名typevarchar(20)不可種類authorvarchar(20)不可作者皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 21 頁(yè)translatorvarchar(20)不可翻譯者publishervarchar(20)不可出版社publish_timevarchar(20)不可出版時(shí)間pricevarchar(20)不可價(jià)格stockvarchar(20)不可狀態(tài) 表 3-3 借還書信息表(borrow)字段名數(shù)據(jù)類型可否為空說(shuō)明book_idvarchar(20)不可圖書編號(hào)reader_idvarchar(20)不可讀者 idborrow_dateva

45、rchar(20)不可借書時(shí)間back_datevarchar(20)不可還書時(shí)間is_backint(10)不可是否歸還idint(100)不可自動(dòng)編號(hào)表 3-4 管理員信息表(user)字段名數(shù)據(jù)類型可否為空說(shuō)明idint(100)不可自動(dòng)編號(hào)namevarchar(20)不可管理員用戶名passvarchar(20)不可借用戶密碼is_adminint(10)不可是否為管理員皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 22 頁(yè)3.33.3 數(shù)據(jù)檢索功能的實(shí)現(xiàn)數(shù)據(jù)檢索功能的實(shí)現(xiàn)該部分以系統(tǒng)查詢圖書信息模塊為例,重點(diǎn)演示說(shuō)明在宿主語(yǔ)言 java 中嵌入 sql 實(shí)現(xiàn)對(duì)書籍?dāng)?shù)據(jù)的檢索。 圖 3.2 圖書信

46、息查詢操作界面(1) 圖 3.3 圖書信息查詢操作界面(2)皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 23 頁(yè) 用戶以正確匹配的用戶名和密碼登陸系統(tǒng)后,點(diǎn)擊“查詢管理”進(jìn)入“圖書查詢”,可出現(xiàn)圖 3.3,。 該部分圖書檢索功能以圖書編號(hào)為檢索條件,輸入“圖書編號(hào)”,點(diǎn)擊查詢即可查找相應(yīng)的圖書信息,程序?qū)崿F(xiàn)中,在查詢圖書的方法 bookquery內(nèi)設(shè)置“圖書編號(hào)”變量“id”,通過(guò) string id = tf_id.gettext();獲取用戶輸入的圖書編號(hào) ,最后通過(guò)對(duì) sql 語(yǔ)句的執(zhí)行,獲取所要檢索的圖書信息sql 語(yǔ)句:string sql = select * from book;if (id

47、 != null & id.length() 0) sql = select * from book where id = + id + ;部分代碼展示:部分代碼展示: 連接數(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)conn = drivermanager.getconnection(url, dbuser, dbpwd); / 建立數(shù)據(jù)庫(kù)連接 elsereturn;皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 24 頁(yè) catch (exception ee) ee.

48、printstacktrace();前臺(tái)實(shí)現(xiàn)數(shù)據(jù)檢索的方法:private void btn_cxactionperformed(actionevent e) string id = tf_id.gettext(); / 獲取圖書編號(hào)/ 根據(jù)查詢條件構(gòu)建sqlstring sql = select * from book;if (id != null & id.length() 0) sql = select * from book where id = + id + ;/ 執(zhí)行查詢操作,將查詢結(jié)果顯示到界面object results = getresult(bookdao.selectbo

49、oklist(sql);defaulttablemodel model = new defaulttablemodel();table.setmodel(model);model.setdatavector(results, heads);具體執(zhí)行部分:/ 執(zhí)行數(shù)據(jù)庫(kù)查詢操作public static resultset executequery(string sql) try 皖西學(xué)院本科畢業(yè)論文(設(shè)計(jì))第 25 頁(yè)if (conn = 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()

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論