嵌入式編程第8講數(shù)據(jù)庫_第1頁
嵌入式編程第8講數(shù)據(jù)庫_第2頁
嵌入式編程第8講數(shù)據(jù)庫_第3頁
嵌入式編程第8講數(shù)據(jù)庫_第4頁
嵌入式編程第8講數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第7章:嵌入式數(shù)據(jù)庫第1節(jié):嵌入式數(shù)據(jù)庫的特點(diǎn)第2節(jié):常用的嵌入式數(shù)據(jù)庫 第3節(jié):SQLite數(shù)據(jù)庫基礎(chǔ)第4節(jié):在C程序中使用SQLite數(shù)據(jù)庫第5節(jié):在GUI應(yīng)用程序中的應(yīng)用SQLite數(shù)據(jù)庫第7章:嵌入式數(shù)據(jù)庫第1節(jié):嵌入式數(shù)據(jù)庫的特點(diǎn)第2節(jié):常用的嵌入式數(shù)據(jù)庫 第3節(jié):SQLite數(shù)據(jù)庫基礎(chǔ)第4節(jié):在C程序中使用SQLite數(shù)據(jù)庫第5節(jié):在GUI應(yīng)用程序中的應(yīng)用SQLite數(shù)據(jù)庫 對于簡單的數(shù)據(jù)可以通過文件的形式進(jìn)行存儲、檢索。 應(yīng)用程序需要對數(shù)據(jù)進(jìn)行復(fù)雜的操作時(shí),就要使用數(shù)據(jù)庫。 嵌入式數(shù)據(jù)庫屬于程序驅(qū)動(dòng)式,而通用的數(shù)據(jù)庫屬于引擎響應(yīng)式。 嵌入式數(shù)據(jù)庫的特點(diǎn):(1)體積小(2)可靠性高

2、(3)可定制性好(4)支持SQL查詢語言(5)提供接口函數(shù),供高級語言調(diào)用(6)實(shí)時(shí)性好(7)有一定的底層驅(qū)動(dòng)能力第7章:嵌入式數(shù)據(jù)庫第1節(jié):嵌入式數(shù)據(jù)庫的特點(diǎn)第2節(jié):常用的嵌入式數(shù)據(jù)庫 第3節(jié):SQLite數(shù)據(jù)庫基礎(chǔ)第4節(jié):在C程序中使用SQLite數(shù)據(jù)庫第5節(jié):在GUI應(yīng)用程序中的應(yīng)用SQLite數(shù)據(jù)庫 常用數(shù)據(jù)庫(1)db2 db3(2)Oracle (3)Informix (4)Sybase (5)SQL Server (6)PostgreSQL (7)mySQL 常用的嵌入式數(shù)據(jù)庫(1)mSQL mSQL(mini SQL)是一個(gè)單用戶數(shù)據(jù)庫管理系統(tǒng),個(gè)人使用免費(fèi),商業(yè)使用收費(fèi)。 m

3、SQL(mini SQL)是一種小型的關(guān)系數(shù)據(jù)庫,性能不是太好,對SQL語言的支持也不夠完全,在運(yùn)行簡單的SQL語句時(shí)速度比MySQL略快。(2)Berkeley DB Berkeley DB是由美國Sleepycat Software公司開發(fā)的一套開放源碼的嵌入式數(shù)據(jù)庫的程序庫(database library),(3)SQlite SQLite 是用 C 語言編寫的開源嵌入式數(shù)據(jù)庫引擎。它是完全獨(dú)立的,不具有外部依賴性。智能手機(jī)PDA導(dǎo)航定位系統(tǒng)通信設(shè)備 嵌入式數(shù)據(jù)庫應(yīng)用第7章:嵌入式數(shù)據(jù)庫第1節(jié):嵌入式數(shù)據(jù)庫的特點(diǎn)第2節(jié):常用的嵌入式數(shù)據(jù)庫 第3節(jié):SQLite數(shù)據(jù)庫基礎(chǔ)第4節(jié):在C程序

4、中使用SQLite數(shù)據(jù)庫第5節(jié):在GUI應(yīng)用程序中的應(yīng)用SQLite數(shù)據(jù)庫 SQLite的源代碼是C,其源代碼完全開放。 SQLite第一個(gè)Alpha版本誕生于2000年5月。(1)支持ACID事務(wù);(2)零配置(3)一無需安裝和管理配置;(4)儲存在單一磁盤文件中的一個(gè)完整的數(shù)據(jù)庫;(5)數(shù)據(jù)庫文件可以在不同字節(jié)順序的機(jī)器間自由共享;(6)支持?jǐn)?shù)據(jù)庫大小至2TB;(7)足夠小,全部源碼大致3萬行c代碼,250KB; SQLite有以下特性:(8)比目前流行的大多數(shù)數(shù)據(jù)庫對數(shù)據(jù)的操作要快;(9)提供了對事務(wù)功能和并發(fā)處理的支持,應(yīng)用Transaction既保證了數(shù)據(jù)的完整性,也會提高運(yùn)行速度,

5、因?yàn)槎鄺l語句一起提交給數(shù)據(jù)庫的速度會比一條一條的提交方式更快;(10)程序獨(dú)立運(yùn)行,沒有額外依賴。(11)SQL語言很大程度上實(shí)現(xiàn)了ANSI SQL92標(biāo)準(zhǔn),特別是支持視圖、觸發(fā)器、事務(wù),支持嵌套SQL ACID(Atomic、 Consistent、 Isolated、 Durable)即:事務(wù)的原子性、一致性、獨(dú)立性及持久性。 事務(wù)的原子性是指一個(gè)事務(wù)要么全部執(zhí)行,要么不執(zhí)行.也就是說一個(gè)事務(wù)不可能只執(zhí)行了一半就停止了.比如你從取款機(jī)取錢,這個(gè)事務(wù)可以分成兩個(gè)步驟:1劃卡,2出錢.不可能劃了卡,而錢卻沒出來.這兩步必須同時(shí)完成.要么就不完成. 事務(wù)的獨(dú)立性是指兩個(gè)以上的事務(wù)不會出現(xiàn)交錯(cuò)執(zhí)行

6、的狀態(tài).因?yàn)檫@樣可能會導(dǎo)致數(shù)據(jù)不一致. 事務(wù)的持久性是指事務(wù)運(yùn)行成功以后,就系統(tǒng)的更新是永久的.不會無緣無故的回滾. 事務(wù)的一致性是指事務(wù)的運(yùn)行并不改變數(shù)據(jù)庫中數(shù)據(jù)的一致性.例如,完整性約束了a+b=10,一個(gè)事務(wù)改變了a,那么b也應(yīng)該隨之改變. SQLite下載地址: 文件名:sqlite-3.6.7.tar.gz下linux操作系統(tǒng)下進(jìn)行解壓運(yùn)行本小節(jié)介紹在PC中上運(yùn)行SQLite3程序1、SQLite3的安裝tar命令是文件和目錄創(chuàng)建檔案命令,常用的參數(shù) -c :建立一個(gè)打包文件;-x :解開一個(gè)打包文件;-t :查看 tar包里面的文件;-z :壓縮/解壓縮.tar.gz文件;-v :

7、壓縮的過程中顯示文件;-f :使用文件名,請留意,在f之后要立即接文件名,不要再加其它參數(shù);(1)解壓、配置、編譯、安裝rootlocalhost home#tar zxvf sqlite-3.6.7.tar.gzrootlocalhost home#cd /home/sqlite-3.6.7rootlocalhost sqlite-3.6.7#mkdir sqlitetestrootlocalhost sqlite-3.6.7# cd /home/sqlite-3.6.7/sqlitetestrootlocalhost sqlitetest#./configure disable-tclro

8、otlocalhost sqlitetest#makerootlocalhost sqlitetest#make install(2)數(shù)據(jù)庫運(yùn)行環(huán)境設(shè)置庫文件安裝的目錄:/usr/local/lib可執(zhí)行文件安裝的目錄:/usr/local/bin頭文件安裝的目錄:/usr/local/include系統(tǒng)自動(dòng)在那些目錄搜索庫是由/etc/ld.so.conf文件決定的。修改/etc/ld.so.conf文件,然后讓文件內(nèi)容生效,則要運(yùn)行命令rootlocalhost sqlitetest#/sbin/ldconfigrootlocalhost sqlitetest#sqlite3 test.d

9、bsqlite2、SQLite3的命令復(fù)習(xí):數(shù)據(jù)庫、數(shù)據(jù)表、記錄、字段之間的關(guān)系2、SQLite3的命令 (注意前面要加.).help.exit.quit.database.tables.schema 表名.dump 表名.output 文件名復(fù)習(xí)SQL命令 (注意后面要加;)創(chuàng)建:create table 表名 (字段設(shè)定列表); 選擇:select * from table1 where 范圍插入:insert into table1(field1,field2) values(value1,value2)刪除:delete from table1 where 范圍更新:update ta

10、ble1 set field1=value1 where 范圍查找:select * from table1 where field1 like %value1% 排序:select * from table1 order by field1,field2 desc總數(shù):select count * as totalcount from table1求和:select sum(field1) as sumvalue from table13、SQLite3的數(shù)據(jù)類型SQLite3的字段是無類型為了增加SQLite3數(shù)據(jù)庫和其它兼容,它支持NULLINTEGERREALTEXTBLOB第7章:嵌

11、入式數(shù)據(jù)庫第1節(jié):嵌入式數(shù)據(jù)庫的特點(diǎn)第2節(jié):常用的嵌入式數(shù)據(jù)庫 第3節(jié):SQLite數(shù)據(jù)庫基礎(chǔ)第4節(jié):在C程序中使用SQLite數(shù)據(jù)庫第5節(jié):在GUI應(yīng)用程序中的應(yīng)用SQLite數(shù)據(jù)庫 C程序訪問數(shù)據(jù)庫是通過調(diào)用數(shù)據(jù)庫的API函數(shù)來實(shí)現(xiàn)的。SQLite3提供了C/C+語言操作的API函數(shù)共83個(gè)。1、SQLite3的API函數(shù)(1)打開數(shù)據(jù)庫int sqlite3_open(const char *filename, /*數(shù)據(jù)庫文件名稱*/sqlite3 *ppDb /*輸出參數(shù),數(shù)據(jù)庫的句柄*/);例如:sqlite3 *db=NULL;int rc;rc=sqlite3_open(“tes

12、t.db”,&db);(2)關(guān)閉數(shù)據(jù)庫int sqlite3_close(sqlite3 *db);例如:sqlite3 *db=NULL;int rc;rc=sqlite3_open(“test.db”,&db);Sqlite3_close(db);(3)執(zhí)行函數(shù)int sqlite3_exec(sqlite3 *, /*數(shù)據(jù)庫句柄*/const char *sql, /*要執(zhí)行的SQL語句*/sqlite_callback, /*回調(diào)函數(shù)*/void *, /*回調(diào)函數(shù)的參數(shù)*/char *errmsg /*錯(cuò)誤信息*/);char *sql=“create table tea(id in

13、teger primary key,name varchar(10);sqlite3_exec(db,sql,0,0,&Errormsg);(4)獲取結(jié)果集int sqlite3_get_table(sqlite3 *, /*數(shù)據(jù)庫的句柄*/const char *sql, /*要執(zhí)行的SQL語句*/char *Result, /*結(jié)果集*/int *nrow, /*結(jié)果集的行數(shù)*/int *ncol, /*結(jié)果集的列數(shù)*/char *errmsg /*錯(cuò)誤信息*/);實(shí)例:sql=“select * from teacher”;sqlite3_get_table(db,sql,&Result

14、,&nrow, &ncol,&Errmsg);序號名稱工資1小王15002小李25003小張3000teacher請問:nrowncolResult4的值是多少?實(shí)例:sql=“select * from teacher”;sqlite3_get_table(db,sql,&Result,&nrow, &ncol,&Errmsg);序號名稱工資1小王15002小李25003小張3000teacher請問:nrowncolResult443小王(5)釋放內(nèi)存函數(shù)void sqlite3_free(char *z);sqlite3_free(Errormsg);二、實(shí)例利用API函數(shù)編程,完成以下

15、功能:(1)打開(或創(chuàng)建)數(shù)據(jù)庫test.db(2)創(chuàng)建teacher表。(3)在表中輸入2條記錄IDName1 Sunjm2 zhstest.db-teacher(4)將表中的記錄顯示出來ID | Name1 |Sunjm2 |zhs程序7.1sqlitetest.c#include#includeint main() sqlite3 *db=NULL; int rc, i=0, nrow,ncol; char *Errormsg, *Result; rc=sqlite3_open(test.db,&db); if(rc)fprintf(stderr,cant open database:%

16、sn,sqlite3_errmsg(db);sqlite3_close(db);return 1; elseprintf(open database successly!n);IDNametest.db-teacher程序7.1sqlitetest.cchar *sql=create table teacher(id integer primary key,name varchar(10);sqlite3_exec(db,sql,0,0,&Errormsg);sql=insert into teacher values(1,sunjm);sqlite3_exec(db,sql,0,0,&Err

17、ormsg);sql=insert into teacher values(2,zhs);sqlite3_exec(db,sql,0,0,&Errormsg);sql=select * from teacher;sqlite3_get_table(db,sql,&Result,&nrow,&ncol,&Errormsg);IDNameteacher1 Sunjm2 zhs程序7.1sqlitetest.cprintf(row=%d column=%dn,nrow,ncol);printf(the result is:n);for(i=0;i(nrow+1)*ncol;i+)printf(Res

18、ult%d=%sn,i,Resulti);sqlite3_free(Errormsg);sqlite3_free_table(Result);sqlite3_close(db);return 0;ID | Name1 |Sunjm2 |zhs程序7.1sqlitetest.cgcc -o sqlitetest sqlitetest.c -lsqlite3請問:如何將這個(gè)文件在實(shí)驗(yàn)箱上運(yùn)行?(1)使用交叉編譯器,生成支持ARM體系的可執(zhí)行程序:sqlite3庫 文 件:libsqlite3.so.0.8.6頭 文 件:sqlite3.h二、在實(shí)驗(yàn)箱上運(yùn)行SQLite3程序 交叉編譯SQLite3

19、./configure -disable-tcl -host=armv4l-unknown-linux -prefix=/usr/local makemake installrootlocalhost home#tar zxvf sqlite-3.6.7.tar.gzrootlocalhost home#cd /home/sqlite-3.6.7rootlocalhost sqlite-3.6.7#mkdir sqlitetestrootlocalhost sqlite-3.6.7# cd /home/sqlite-3.6.7/sqlitetestrootlocalhost sqlitetes

20、t#./configure disable-tclrootlocalhost sqlitetest#makerootlocalhost sqlitetest#make install./configure -disable-tcl host=armv4l-unknown-linux prefix=/usr/local makemake install指定了主機(jī)的體系結(jié)構(gòu)ARM指定了安裝目錄/usr/local庫目錄:/usr/local/lib頭文件目錄:/usr/local/include可執(zhí)行文件目錄:/usr/local/bin請問可以在實(shí)驗(yàn)箱上直接運(yùn)行sqlite3嗎?在將庫文件加入系

21、統(tǒng),實(shí)驗(yàn)箱的庫默認(rèn)安放目錄是:/lib。/lib是一個(gè)鏈接,它鏈到/mnt/yaffs/lib目錄。cp libsqlite3.so.0.8.6 /mnt/yaffs/libln libsqlite3.so.0.8.6 libsqlite3.so.0./sqlite3 test.db(要將頭文件復(fù)印到實(shí)驗(yàn)箱上嗎?)程序7.1sqlitetest.c生成在ARM機(jī)上可運(yùn)行的程序armv4l-unknown-linux-gcc -o sqlite_arm sqlitetest.c -L /usr/local/lib -lsqlite3 -I /usr/local/include與X86機(jī)編譯時(shí)的區(qū)

22、別(1)編譯器不同(2)頭文件不同(3)庫文件不同第7章:嵌入式數(shù)據(jù)庫第1節(jié):嵌入式數(shù)據(jù)庫的特點(diǎn)第2節(jié):常用的嵌入式數(shù)據(jù)庫 第3節(jié):SQLite數(shù)據(jù)庫基礎(chǔ)第4節(jié):在C程序中使用SQLite數(shù)據(jù)庫第5節(jié):在GUI應(yīng)用程序中的應(yīng)用SQLite數(shù)據(jù)庫Qt提供了Qt SQL模塊為數(shù)據(jù)庫提供平臺和相應(yīng)的接口,該接口提供了一套類來實(shí)現(xiàn)用戶對數(shù)據(jù)庫的訪問。Qt SQL模塊中用于實(shí)現(xiàn)數(shù)據(jù)庫連接并處理的類分成3個(gè)層次。第一層是數(shù)據(jù)庫的驅(qū)動(dòng)層。第二層是數(shù)據(jù)庫的連接層。第三層是用戶接口層。一、Qt驅(qū)動(dòng)Qt 支持的驅(qū)動(dòng)程序如下:驅(qū)動(dòng)程序數(shù)據(jù)庫QSQLITESQLite version 3 and laterQMYSQ

23、LMySQLQDB2IBM DB2二、Qt與數(shù)據(jù)庫的連接Qt 實(shí)現(xiàn)與數(shù)據(jù)庫的連接需要使用QSqlDatabase類,通過驅(qū)動(dòng)程序與數(shù)據(jù)庫建立連接,然后設(shè)置HostName、DatabaseName、UserName、Password等屬性。下一步就可以打開數(shù)據(jù)庫,并對數(shù)據(jù)庫進(jìn)行各種操作。例如:QSqlDatabase db=QSqlDatabase:addDatabase(“QSQLITE”);db.setDatabaseName(zhs.db);if(!db.open()qDebug()db.lastError();qFatal(Failed to connect.);三、Qt執(zhí)行SQL命令

24、Qt 實(shí)現(xiàn)與數(shù)據(jù)庫連接后,就可以使用QSqlQuery對象執(zhí)行SQL命令來對數(shù)據(jù)庫進(jìn)行操作。例如:執(zhí)行一條SELECT語句:QSqlQuery query;Query.exec(”SELECT * FROM teacher”);while(query.next()coutquery.value(0)endl;coutquery.value(1);四、Qt的SQL模型Qt 提供了一系列模型類和模型/視圖框架。使用這些模型,用戶可以在實(shí)現(xiàn)對數(shù)據(jù)庫的SQL語句操作之后,自動(dòng)向視圖表中添加數(shù)據(jù)。Qt提供3種SQL模型:(1)QSqlQueryModel:為SELECT SQL語句結(jié)果集提供只讀數(shù)據(jù)模型。(2)QSq

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論