摘要:數(shù)據(jù)庫(kù)是用來(lái)存儲(chǔ)和管理數(shù)據(jù)的專(zhuān)用軟件,使得管理數(shù)據(jù)更加安全,方便和高效。數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)的管理的基本單位是表(table),在嵌入式linux中有時(shí)候它也需要用到數(shù)據(jù)庫(kù),聽(tīng)起來(lái)好難,其實(shí)就是幾個(gè)函數(shù),掌握了就好。
一、常見(jiàn)的數(shù)據(jù)庫(kù)
大型數(shù)據(jù)庫(kù)(大型機(jī))Oracle(億級(jí)),中型數(shù)據(jù)庫(kù)(分布式超大型)mysql(百萬(wàn)級(jí)),輕型數(shù)據(jù)庫(kù)(嵌入式設(shè)備)sqlite(萬(wàn)級(jí)),訪問(wèn)數(shù)據(jù)庫(kù)使用SQL語(yǔ)句,適用于所有的數(shù)據(jù)庫(kù)。
二、安裝SQLite3
有C環(huán)境就可以調(diào)用sqlite
2.1直接用命令安裝
sudoapt-getupdate sudoapt-getinstallsqlite3
2.2 直接編譯源碼
將源碼拷貝到Ubuntu的非共享目錄解壓
解壓命令:
tarzvxfsqlite-autoconf-3380500.tar.gz
配置
cdsqlite-snapshot-201708031550 ./configure--prefix=/home/gec/sqlite
編譯
make
安裝
makeinstall
三、SQLite的使用
新建數(shù)據(jù)庫(kù)文件 sqlite3數(shù)據(jù)庫(kù)文件的路徑//打開(kāi)/創(chuàng)建 //比如:sqlite3 first.db

3.1 基本操作命令
.exit/.quit--------退出數(shù)據(jù)庫(kù)命令行 .help--------------幫助說(shuō)明信息 .tables------------查看當(dāng)前數(shù)據(jù)庫(kù)中所有的表
3.2 數(shù)據(jù)庫(kù)訪問(wèn)的SQL語(yǔ)句
基本語(yǔ)法:
所有的SQL語(yǔ)句都以分號(hào)(;)結(jié)束 不區(qū)分大小寫(xiě)
3.3 新建表格
createtable表名(字段名1字段類(lèi)型1,字段名2字段類(lèi)型2,字段名3字段類(lèi)型3,...); 比如: //創(chuàng)建一個(gè)stutbl的表,表中有3個(gè)字段 //分別是整數(shù)類(lèi)型的學(xué)號(hào)id,字符串類(lèi)型的name和整數(shù)類(lèi)型的age createtablezhiguoxin(idint,namechar[20],ageint); //不存在則創(chuàng)建 createtableifnotexistszhiguoxin(idint,namechar[20],ageint); //如果希望表中某個(gè)字段的內(nèi)容不重復(fù),可以用unique修飾該字段 createtableifnotexistszhiguoxin(idintunique,namechar[20],ageint);

3.4 刪除表格
droptable表名; //droptablezhiguoxin;
3.5 往表格中插入數(shù)據(jù)
insertinto表名values(字段值1,字段值2,字段值3,....); //字段值如果是字符串,必須用''(單引號(hào))括起來(lái) 比如: insertintozhiguoxinvalues(1001,'劉堯',18); insertintozhiguoxinvalues(1002,'聶衍文',19); insertintozhiguoxinvalues(1003,'楊佳晨',20); insertintozhiguoxinvalues(1004,'馮華陽(yáng)',21);

完成插入之后,zhiguoxin 的表格內(nèi)容如下:
id | name | age |
---|---|---|
1001 | 劉堯 | 18 |
1002 | 聶衍文 | 19 |
1003 | 楊佳晨 | 20 |
1004 | 馮華陽(yáng) | 21 |
3.6 查詢(xún)表中的數(shù)據(jù)
//查詢(xún)表中的所有數(shù)據(jù)
select*from表名; //select*fromzhiguoxin;

3.7 查看數(shù)據(jù)庫(kù)
可以把first.db數(shù)據(jù)庫(kù)文件拷貝至windows下,使用SQLite Developer打開(kāi)即可看到。SQLite Developer下載地址
https://mydown.yesky.com/pcsoft/443425.html

3.8 按條件查找
1.使用where指定查詢(xún)條件
select*fromzhiguoxinwhereid=1003;//查詢(xún)id值為1003的條目 select*fromzhiguoxinwhereage>=19andage<21; select?*?from?zhiguoxin?where?age>=19orage<21;

2.指定查詢(xún)的字段
selectid,name,agefromzhiguoxin;//只查詢(xún)id,name,age的字段

3.使用where+like實(shí)現(xiàn)模糊查詢(xún)
select*fromzhiguoxinwherenamelike'劉%';//查找名字以劉開(kāi)頭的條目

4.使用order by實(shí)現(xiàn)查詢(xún)結(jié)果按某個(gè)字段的值升序/降序輸出
select*fromzhiguoxinorderbyagedesc;//按年齡降序排序 select*fromzhiguoxinorderbyidasc;//按id升序排序

3.9 刪除表中的條目
deletefrom表名where條件;//刪除所有符合條件的條目 比如: deletefromzhiguoxinwhereid=1001;

3.10 更新(修改)表中的條目
update表名set字段名1=字段值1,字段名2=字段值2...where條件;//修改符合條件的條目 比如: updatezhiguoxinsetage=100whereid=1002;

3.11 SQLite中字段類(lèi)型
數(shù)字:
int-------整型 smallint----短整型 tinyint-----微型整數(shù)(0~255) bit---------0or1 float------單精度浮點(diǎn)型 real-------雙精度浮點(diǎn)型
字符串:
char----------非unicode定長(zhǎng)字符串8000 varchar?-------?非unicode變長(zhǎng)字符串?8000 text?----------?非unicode變長(zhǎng)字符串?2^32-1 nchar?----------?unicode定長(zhǎng)字符串?8000 nvarchar?-------?unicode變長(zhǎng)字符串?8000 ntext?----------?unicode變長(zhǎng)字符串?2^32-1
sqlite本身自帶C語(yǔ)言訪問(wèn)接口,在C語(yǔ)言的環(huán)境下可以直接使用,使用這些接口的代碼需要 sqlite的源碼編譯進(jìn)可執(zhí)行程序 或者 編譯時(shí)鏈接sqlite的庫(kù)。
4.1 打開(kāi) sqlite3_open
intsqlite3_open( constchar*filename,/*數(shù)據(jù)庫(kù)的文件路徑*/ sqlite3**ppDb/*輸出參數(shù):傳出代表打開(kāi)數(shù)據(jù)庫(kù)的句柄*/ ); //成功返回SQLITE_OK,否則打開(kāi)失敗char ----------非unicode定長(zhǎng)字符串< 8000 varchar :非unicode變長(zhǎng)字符串?8000 text :非unicode變長(zhǎng)字符串?2^32-1 nchar:unicode定長(zhǎng)字符串?8000 nvarchar?:?unicode變長(zhǎng)字符串?8000 ntext?:unicode變長(zhǎng)字符串?2^32-1
4.2 關(guān)閉 sqlite3_close
intsqlite3_close(sqlite3*pDb); //傳入要關(guān)閉的數(shù)據(jù)庫(kù)的句柄
4.3 編譯方法
1.直接編譯源碼 gccsqlite3.csqlite_test.c-pthread-ldl-osqlite_test 2.鏈接sqlite3的動(dòng)態(tài)庫(kù) gccsqlite_test.c-pthread-ldl-lsqlite3-L/home/gec/sqlite/lib-osqlite_test //如果運(yùn)行時(shí)找不到sqlite3的庫(kù),可以將編譯出來(lái)的庫(kù)文件拷貝到/usr/lib目錄下(cp-r)
4.4 執(zhí)行SQL語(yǔ)句的接口 sqlite3_exec
intsqlite3_exec( sqlite3*pDb,/*打開(kāi)的數(shù)據(jù)庫(kù)的句柄*/ constchar*sql,/*要執(zhí)行的SQL語(yǔ)句*/ int(*callback)(void*arg,intcol,char**str,char**name), /*回調(diào)函數(shù),處理SQL語(yǔ)句執(zhí)行返回的結(jié)果(查詢(xún)),一條結(jié)果調(diào)用一次 arg-exec的第四個(gè)參數(shù) col-本條結(jié)果的字段數(shù) str-記錄字段值的數(shù)組 name-記錄字段名的數(shù)組 回調(diào)函數(shù)必須返回SQLITE_OK*/ void*arg,/*傳遞給回調(diào)函數(shù)的第一個(gè)參數(shù)*/ char**errmsg/*錯(cuò)誤信息*/ ); //成功返回SQLITE_OK,否則執(zhí)行失敗
幾個(gè)例子
//連接數(shù)據(jù)庫(kù) intConnection_Sqlite3DataBase() { rc=sqlite3_open("./face_database/face.db",&db); if(rc!=SQLITE_OK) { fprintf(stderr,"Can'topendatabase:%s ",sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } else printf("Youhaveopenedasqlite3databasenamedbind.dbsuccessfully! Congratulation!Havefun! "); return0; } //將圖片插入到數(shù)據(jù)庫(kù) voidinsert_face_data_toDataBase(constchar*name,MByte*face_feature,MInt32featureSize) { sqlite3_prepare(db,"insertintoface_data_table(name,face_feature,feature_size)values(?,?,?);",-1,&stmt,NULL); sqlite3_bind_text(stmt,1,name,strlen(name),NULL); sqlite3_bind_blob(stmt,2,face_feature,featureSize,NULL); sqlite3_bind_int(stmt,3,featureSize); sqlite3_step(stmt); }

-
嵌入式
+關(guān)注
關(guān)注
5149文章
19659瀏覽量
317354 -
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3926瀏覽量
66184 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4379瀏覽量
64828
原文標(biāo)題:手把手教你在嵌入式設(shè)備中使用SQLite3
文章出處:【微信號(hào):pzh_mcu,微信公眾號(hào):痞子衡嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
數(shù)據(jù)庫(kù)復(fù)制的設(shè)計(jì)和管理
數(shù)據(jù)庫(kù)管理系統(tǒng)層次安全技術(shù)
Informix數(shù)據(jù)庫(kù)的管理
數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)是什么意思
保護(hù)MySQL數(shù)據(jù)倉(cāng)庫(kù)的最佳實(shí)踐
數(shù)據(jù)庫(kù)教程之數(shù)據(jù)庫(kù)的創(chuàng)建與管理詳細(xì)資料免費(fèi)下載

數(shù)據(jù)庫(kù)有哪些常見(jiàn)的應(yīng)用結(jié)構(gòu)數(shù)據(jù)庫(kù)應(yīng)用結(jié)構(gòu)的使用資料概述

數(shù)據(jù)庫(kù)管理系統(tǒng)的功能
數(shù)據(jù)庫(kù)系統(tǒng)的常見(jiàn)用戶(hù)
數(shù)據(jù)庫(kù)教程之SQL Server數(shù)據(jù)庫(kù)管理的詳細(xì)資料說(shuō)明

常見(jiàn)MySQL數(shù)據(jù)庫(kù)管理工具的介紹

評(píng)論