




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第21章 Linux系統(tǒng)常用數(shù)據(jù)庫(kù)及接口,于程序設(shè)計(jì)來(lái)說(shuō),所進(jìn)行的工作更趨向于從數(shù)據(jù)處理中抽象出來(lái)的業(yè)務(wù)邏輯,于是產(chǎn)生了數(shù)據(jù)層、邏輯層、表示層三層模型概念。 三層模型對(duì)大型企業(yè)應(yīng)用設(shè)計(jì)所面臨的問(wèn)題進(jìn)行了細(xì)分,Linux系統(tǒng)中C語(yǔ)言程序設(shè)計(jì)所面向的問(wèn)題主要為其中的應(yīng)用層,本章將通過(guò)介紹Linux系統(tǒng)常用數(shù)據(jù)庫(kù)及接口來(lái)進(jìn)一步說(shuō)明其概念。,21.1 SQLite數(shù)據(jù)庫(kù),SQLite數(shù)據(jù)庫(kù)是一種開(kāi)源的嵌入式數(shù)據(jù)庫(kù)系統(tǒng),與Berkeley DB數(shù)據(jù)包相比,SQLite雖然在性能上不及,但使用起來(lái)更為簡(jiǎn)單方便。因此SQLite數(shù)據(jù)庫(kù)是設(shè)計(jì)小型應(yīng)用系統(tǒng)的首選,配合一些開(kāi)源工具使用也可使其成為具有網(wǎng)絡(luò)訪問(wèn)功能
2、的數(shù)據(jù)庫(kù)。,21.1.1 SQLite簡(jiǎn)介,SQLite是理查德希普用C語(yǔ)言編寫(xiě)的開(kāi)源嵌入式數(shù)據(jù)庫(kù)引擎。其數(shù)據(jù)庫(kù)管理功能完全獨(dú)立,不具有外部依賴(lài)性。與Berkeley DB數(shù)據(jù)包相比,SQLite支持多數(shù)SQL92標(biāo)準(zhǔn),可用SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理。SQLite與Linux系統(tǒng)的結(jié)合也非常好,其原始的目標(biāo)平臺(tái)即Linux系統(tǒng),并且支持多種硬件架構(gòu)。此外,SQLite非常健壯,能支持TB級(jí)別數(shù)據(jù)操作,并且為大多數(shù)程序設(shè)計(jì)語(yǔ)言提供了接口函數(shù)庫(kù),特別是C語(yǔ)言。,21.1.2 連接SQLite數(shù)據(jù)庫(kù),SQLite數(shù)據(jù)庫(kù)的接口函數(shù)包含在頭文件“sqlite3.h”中,連接數(shù)據(jù)庫(kù)只需要sqlite3_o
3、pen()一條函數(shù)即可。,21.1.3 SQLite命令執(zhí)行函數(shù),SQLite的SQL命令執(zhí)行函數(shù)只有sqlite3_exec()一條,但是它也能很好的滿足工作需要。它的一般形式為: int sqlite3_exec( sqlite3*,/ 有效的數(shù)據(jù)庫(kù)標(biāo)識(shí)符 const char *sql,/ SQL命令字符串 int (*callback)(void*,int,char*,char*),/ 回調(diào)函數(shù) void *,/ 第一個(gè)回調(diào)參數(shù) char *errmsg/ 將錯(cuò)誤信息寫(xiě)到此指針指向的地址 );,21.1.4 SQLite檢索查詢(xún)結(jié)果函數(shù),SQLite數(shù)據(jù)庫(kù)可通過(guò)SQL語(yǔ)句執(zhí)行函數(shù)執(zhí)行S
4、QL查詢(xún)語(yǔ)句檢索相關(guān)數(shù)據(jù),并將數(shù)據(jù)以字符串形式返回給程序。sqlite3_get_table()函數(shù)用于檢索數(shù)據(jù)表內(nèi)的數(shù)據(jù),它的一般形式是: int sqlite3_get_table( sqlite3 *db,/ 可用的數(shù)據(jù)庫(kù)標(biāo)識(shí)符 const char *zSql,/ SQL查詢(xún)語(yǔ)句 char *pazResult,/ 查詢(xún)結(jié)果 int *pnRow,/ 所查詢(xún)到結(jié)果的行數(shù) int *pnColumn,/ 所查詢(xún)到結(jié)果的列數(shù) char *pzErrmsg/ 錯(cuò)誤信息寫(xiě)入的地址 );,21.2 MySQL數(shù)據(jù)庫(kù),MySQL是一個(gè)開(kāi)放源碼的小型關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),開(kāi)發(fā)者為瑞典MySQL AB公
5、司。2008年,美國(guó)Sun公司正式收購(gòu)MySQL,但MySQL依然使用GPL許可證發(fā)行。目前MySQL被廣泛地應(yīng)用在Linux系統(tǒng)上。由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),許多中小型企業(yè)為了降低數(shù)據(jù)庫(kù)總體擁有成本而選擇了MySQL作為企業(yè)應(yīng)用數(shù)據(jù)庫(kù)。,21.2.1 MySQL簡(jiǎn)介,MySQL是一個(gè)廣受Linux社區(qū)歡迎的數(shù)據(jù)庫(kù),很多Linux發(fā)行版都將其作為自身的一部分。MySQL支持大量的數(shù)據(jù)類(lèi)型,并支持變長(zhǎng)的BLOB(Binary Large OBject)類(lèi)型。,21.2.2 連接MySQL數(shù)據(jù)庫(kù),連接MySQL數(shù)據(jù)庫(kù)的C語(yǔ)言函數(shù)庫(kù)包含在mysqlclient庫(kù)中
6、,頭文件名稱(chēng)為“mysql.h”。連接MySQL服務(wù)器時(shí),應(yīng)用程序應(yīng)使用下列步驟進(jìn)行操作: (1)通過(guò)調(diào)用mysql_library_init()函數(shù)初始化MySQL庫(kù)。 (2)通過(guò)調(diào)用mysql_init()函數(shù)初始化連接處理程序,并通過(guò)調(diào)用mysql_real_connect()函數(shù)連接到服務(wù)器。 (3)通過(guò)調(diào)用mysql_close()函數(shù)關(guān)閉與MySQL服務(wù)器的連接。 (4)通過(guò)調(diào)用mysql_library_end()函數(shù)結(jié)束MySQL庫(kù)的使用。,21.2.3 查詢(xún)MySQL數(shù)據(jù)庫(kù),當(dāng)連接處于活動(dòng)狀態(tài)時(shí),客戶(hù)端程序可使用mysql_query()函數(shù)或mysql_real_query
7、()函數(shù)向服務(wù)器發(fā)出SQL查詢(xún)。兩者的差別在于,mysql_query()函數(shù)預(yù)期的查詢(xún)?yōu)橹付ǖ?、由Null終結(jié)的字符串,而mysql_real_query()函數(shù)預(yù)期的是計(jì)數(shù)字符串。如果字符串包含二進(jìn)制數(shù)據(jù)(其中可能包含Null字節(jié)),就必須使用mysql_real_query()函數(shù)。,21.2.4 處理MySQL查詢(xún)結(jié)果,對(duì)于SELECT查詢(xún),能夠檢索作為結(jié)果集的行。注意,某些語(yǔ)句因其返回行,類(lèi)似與SELECT。包括SHOW、DESCRIBE和EXPLAIN。應(yīng)按照對(duì)待SELECT語(yǔ)句的方式處理他們。 1使用mysql_store_result()函數(shù)進(jìn)行查詢(xún) 2使用mysql_use_
8、result()函數(shù)進(jìn)行查詢(xún) 3訪問(wèn)結(jié)果集 4示例,21.3 大型數(shù)據(jù)庫(kù)與通用數(shù)據(jù)庫(kù)接口,前面章節(jié)介紹了一些小型和中型數(shù)據(jù)庫(kù),但對(duì)于需要進(jìn)行超大數(shù)據(jù)量存儲(chǔ)和管理的應(yīng)用領(lǐng)域,如金融企業(yè)、航空運(yùn)輸企業(yè),這些數(shù)據(jù)庫(kù)滿足不了需求。常用的大型數(shù)據(jù)庫(kù)有Oracle、Sybase、Informix和DB2等,雖然這些數(shù)據(jù)庫(kù)不是開(kāi)源軟件,大部分不能運(yùn)行在Linux系統(tǒng)上,但實(shí)際中仍然有在Linux系統(tǒng)中使用C語(yǔ)言開(kāi)發(fā)客戶(hù)端訪問(wèn)這些數(shù)據(jù)庫(kù)的需求。,21.3.1 連接Oracle數(shù)據(jù)庫(kù),。Oracle以數(shù)據(jù)庫(kù)的優(yōu)勢(shì)建立起龐大的應(yīng)用系統(tǒng),包括ERP、CRM等等。Oracle數(shù)據(jù)庫(kù)運(yùn)行平臺(tái)為企業(yè)級(jí)服務(wù)器、服務(wù)器集群和
9、小型計(jì)算機(jī),并支持磁盤(pán)陣列等數(shù)據(jù)倉(cāng)庫(kù)級(jí)存儲(chǔ)系統(tǒng)。 數(shù)據(jù)的存儲(chǔ)形式上,Oracle以文件作為存儲(chǔ)單元,每個(gè)文件保存一個(gè)數(shù)據(jù)表。數(shù)據(jù)文件非常靈活,可隨著數(shù)據(jù)容量的增長(zhǎng)而變化。邏輯結(jié)構(gòu)上,Oracle數(shù)據(jù)庫(kù)又表空間組成,這些表可分為系統(tǒng)表和用戶(hù)表。用戶(hù)表中可存儲(chǔ)數(shù)據(jù)、索引等信息。,21.3.2 通用數(shù)據(jù)庫(kù)接口,開(kāi)發(fā)者迫切需要一種能夠?qū)Χ喾N數(shù)據(jù)庫(kù)進(jìn)行連接和訪問(wèn)、可自動(dòng)在不同數(shù)據(jù)庫(kù)的數(shù)據(jù)類(lèi)型間自動(dòng)轉(zhuǎn)換、使用接近于SQL92標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言的通用數(shù)據(jù)庫(kù)接口。,21.4 媒體播放器媒體庫(kù)的數(shù)據(jù)庫(kù)實(shí)現(xiàn),媒體播放器需要使用數(shù)據(jù)庫(kù)來(lái)保存媒體庫(kù),這樣在每次啟動(dòng)時(shí)可從數(shù)據(jù)庫(kù)讀取當(dāng)前系統(tǒng)中媒體文件的信息,避免重復(fù)遍
10、歷本地文件系統(tǒng)。在Linux的多種數(shù)據(jù)庫(kù)中SQLite最為簡(jiǎn)單易用,不僅在功能上能滿足需求,而且系統(tǒng)開(kāi)銷(xiāo)非常小。本節(jié)將以SQLite為例設(shè)計(jì)媒體庫(kù)模塊的數(shù)據(jù)庫(kù),并實(shí)現(xiàn)相關(guān)操作。,21.4.1 建立和連接數(shù)據(jù)庫(kù),使用SQLite數(shù)據(jù)庫(kù)之前,首先應(yīng)確保已安裝好SQLite數(shù)據(jù)庫(kù)和相關(guān)頭文件。然后在媒體播放器的源代碼目錄中加入文件“db.h”和“db.c”,這兩個(gè)文件專(zhuān)門(mén)用于放置數(shù)據(jù)庫(kù)操作的相關(guān)代碼。編譯時(shí),可使用pkgconfig程序指定SQLite數(shù)據(jù)庫(kù)的相關(guān)開(kāi)發(fā)文件。如果在前面的開(kāi)發(fā)過(guò)程中已使用pkgconfig指定過(guò)多個(gè)函數(shù)庫(kù),新加入的開(kāi)發(fā)指令只需羅列在這些函數(shù)庫(kù)名稱(chēng)之后。 1連接數(shù)據(jù)庫(kù) 2斷開(kāi)數(shù)據(jù)庫(kù)連接,21.4.2 建立媒體庫(kù)數(shù)據(jù)表,媒體庫(kù)數(shù)據(jù)表結(jié)構(gòu)比較簡(jiǎn)單,主要的字段為標(biāo)題、藝術(shù)家、專(zhuān)輯名稱(chēng)、流派、記錄時(shí)間、文件路徑。數(shù)據(jù)表的字段定義見(jiàn)表21.8所示。,21.4.3 管理媒體庫(kù)數(shù)據(jù)表,管理媒體庫(kù)數(shù)據(jù)表包括在媒體播放器啟動(dòng)時(shí)從媒體庫(kù)數(shù)據(jù)表中讀取所有記錄到媒體庫(kù)鏈表、向數(shù)據(jù)表插入記錄、從數(shù)據(jù)表刪除記錄等操作,下面介紹這幾種操作的實(shí)現(xiàn)方法。 1讀取所有記錄到媒體庫(kù)鏈表 2向數(shù)據(jù)表插入記錄 3從數(shù)據(jù)表刪除記錄,21.5 小結(jié),本章介紹了在Linux系統(tǒng)上連接多種數(shù)據(jù)庫(kù)的方法,這些數(shù)據(jù)庫(kù)都為C語(yǔ)言開(kāi)發(fā)提供了豐
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 預(yù)防兒童疾病課件
- 汽車(chē)美容洗車(chē)培訓(xùn)
- 音視頻工程師課件
- 油田開(kāi)發(fā)項(xiàng)目建設(shè)管理方案(參考模板)
- 電網(wǎng)側(cè)獨(dú)立儲(chǔ)能示范項(xiàng)目質(zhì)量管理方案(模板)
- xx片區(qū)城鄉(xiāng)供水一體化項(xiàng)目人力資源管理方案(參考)
- 2025年礦業(yè)開(kāi)采模塊項(xiàng)目合作計(jì)劃書(shū)
- 2025年耐侯鋼合作協(xié)議書(shū)
- 2025年年物流倉(cāng)儲(chǔ)項(xiàng)目建議書(shū)
- 2025年地震數(shù)字遙測(cè)接收機(jī)項(xiàng)目發(fā)展計(jì)劃
- 復(fù)方口服避孕藥臨床應(yīng)用中國(guó)專(zhuān)家共識(shí)
- 代收工程款授權(quán)委托書(shū)
- 國(guó)家開(kāi)放大學(xué)專(zhuān)科《辦公室管理》期末紙質(zhì)考試第五大題案例分析總題庫(kù)2025版
- 人教版五年級(jí)數(shù)學(xué)上冊(cè)解決問(wèn)題分類(lèi)練習(xí)及答案
- 2024年天津農(nóng)墾宏達(dá)有限公司招聘筆試沖刺題(帶答案解析)
- 關(guān)于開(kāi)展基層治理小馬拉大車(chē)整治工作方案
- 四年級(jí)四年級(jí)下冊(cè)閱讀理解20篇(附帶答案解析)經(jīng)典
- 西藏自治區(qū)昌都市2021-2022學(xué)年七下期末數(shù)學(xué)試題(原卷版)
- 《胎膜早破教案》課件
- 2024年陜西西安財(cái)金投資管理有限公司招聘筆試參考題庫(kù)含答案解析
- FBS-GC-001-分布式光伏施工日志
評(píng)論
0/150
提交評(píng)論