Linux下轻量级数据库-SQLite3(嵌入式设备)
生活随笔
收集整理的這篇文章主要介紹了
Linux下轻量级数据库-SQLite3(嵌入式设备)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、概念
數據庫是用來存儲和管理數據的專用軟件,使得管理數據更加安全,方便和高效。數據庫對數據的管理的基本單位是表(table)。
二、常見的數據庫
大型數據庫(大型機) —————- Oracle(億級)
中型數據庫(分布式超大型) ———— mysql(百萬級)
輕型數據庫(嵌入式設備) ———— sqlite(萬級)
訪問數據庫使用SQL語句,適用于所有的數據庫。
三、安裝SQLite3
有C環境就可以調用sqite
3.1直接用命令安裝
sudo apt-get update sudo apt-get install sqlite33.2 直接編譯源碼
將源碼拷貝到Ubuntu的非共享目錄解壓
解壓命令:
tar zvxf sqlite-autoconf-3380500.tar.gz配置
cd sqlite-snapshot-201708031550 ./configure --prefix=/home/gec/sqlite編譯
make安裝
make install四、SQLite的使用
新建數據庫文件 sqlite3 數據庫文件的路徑 //打開/創建 //比如:sqlite3 first.db //打開數據庫進入命令行4.1 基本操作命令
.exit/.quit -------- 退出數據庫命令行 .help -------------- 幫助說明信息 .tables ------------ 查看當前數據庫中所有的表4.2 數據庫訪問的SQL語句
基本語法:
所有的SQL語句都以分號(;)結束 不區分大小寫4.3 新建表格
create table 表名(字段名1 字段類型1,字段名2 字段類型2,字段名3 字段類型3,...); 比如: //創建一個stutbl的表,表中有3個字段 //分別是整數類型的學號id,字符串類型的name和整數類型的age create table zhiguoxin(id int,name char[20],age int); //不存在則創建 create table if not exists zhiguoxin(id int,name char[20],age int); //如果希望表中某個字段的內容不重復,可以用unique修飾該字段 create table if not exists zhiguoxin(id int unique,name char[20],age int);4.4 刪除表格
drop table 表名; //drop table zhiguoxin;4.5 往表格中插入數據
insert into 表名 values(字段值1,字段值2,字段值3,....); //字段值如果是字符串,必須用''(單引號)括起來 比如: insert into zhiguoxin values(1001,'劉堯',18); insert into zhiguoxin values(1002,'聶衍文',19); insert into zhiguoxin values(1003,'楊佳晨',20); insert into zhiguoxin values(1004,'馮華陽',21);完成插入之后,zhiguoxin 的表格內容如下:
| 1001 | 劉堯 | 18 |
| 1002 | 聶衍文 | 19 |
| 1003 | 楊佳晨 | 20 |
| 1004 | 馮華陽 | 21 |
4.6 查詢表中的數據
//查詢表中的所有數據
select * from 表名; //select * from zhiguoxin;4.7 查看數據庫
可以把first.db數據庫文件拷貝至windows下,使用SQLite Developer打開即可看到。
SQLite Developer下載地址
4.8 按條件查找
1.使用where指定查詢條件
select * from zhiguoxin where id=1003;//查詢id值為1003的條目 select * from zhiguoxin where age>=19 and age<21; select * from zhiguoxin where age>=19 or age<21;2.指定查詢的字段
select id,name,age from zhiguoxin;//只查詢id,name,age的字段3.使用where+like實現模糊查詢
select * from zhiguoxin where name like '劉%';//查找名字以劉開頭的條目4.使用order by實現查詢結果按某個字段的值升序/降序輸出
select * from zhiguoxin order by age desc;//按年齡降序排序 select * from zhiguoxin order by id asc; //按id升序排序4.9 刪除表中的條目
delete from 表名 where 條件;//刪除所有符合條件的條目 比如: delete from zhiguoxin where id=1001;4.10 更新(修改)表中的條目
update 表名 set 字段名1=字段值1,字段名2=字段值2... where 條件;//修改符合條件的條目 比如: update zhiguoxin set age=100 where id=1002;4.11 SQLite中字段類型
數字:
int ------- 整型 smallint ---- 短整型 tinyint ----- 微型整數(0~255) bit --------- 0 or 1 float ------ 單精度浮點型 real ------- 雙精度浮點型字符串:
char ---------- 非unicode定長字符串 < 8000 varchar ------- 非unicode變長字符串 < 8000 text ---------- 非unicode變長字符串 < 2^32-1nchar ---------- unicode定長字符串 < 8000 nvarchar ------- unicode變長字符串 < 8000 ntext ---------- unicode變長字符串 < 2^32-1五、SQLite的C語言訪問接口
sqlite本身自帶C語言訪問接口,在C語言的環境下可以直接使用,使用這些接口的代碼需要 sqlite的源碼編譯進可執行程序 或者 編譯時鏈接sqlite的庫。
5.1 打開 sqlite3_open
int sqlite3_open(const char *filename, /* 數據庫的文件路徑 */sqlite3 **ppDb /* 輸出參數:傳出代表打開數據庫的句柄 */ ); //成功返回SQLITE_OK,否則打開失敗char ---------- 非unicode定長字符串 < 8000 varchar ------- 非unicode變長字符串 < 8000 text ---------- 非unicode變長字符串 < 2^32-1nchar ---------- unicode定長字符串 < 8000 nvarchar ------- unicode變長字符串 < 8000 ntext ---------- unicode變長字符串 < 2^32-15.2 關閉 sqlite3_close
int sqlite3_close(sqlite3 *pDb); //傳入要關閉的數據庫的句柄5.3 編譯方法(必須鏈接pthread庫和dl庫)
1.直接編譯源碼gcc sqlite3.c sqlite_test.c -pthread -ldl -o sqlite_test 2.鏈接sqlite3的動態庫gcc sqlite_test.c -pthread -ldl -lsqlite3 -L /home/gec/sqlite/lib -o sqlite_test //如果運行時找不到sqlite3的庫,可以將編譯出來的庫文件拷貝到/usr/lib目錄下(cp -r)5.4 執行SQL語句的接口 sqlite3_exec
int sqlite3_exec(sqlite3 *pDb, /* 打開的數據庫的句柄 */const char *sql, /* 要執行的SQL語句 */int (*callback)(void *arg,int col,char **str,char **name), /* 回調函數,處理SQL語句執行返回的結果(查詢),一條結果調用一次 arg - exec的第四個參數col - 本條結果的字段數str - 記錄字段值的數組name - 記錄字段名的數組回調函數必須返回SQLITE_OK */void *arg, /* 傳遞給回調函數的第一個參數 */char **errmsg /* 錯誤信息 */ ); //成功返回SQLITE_OK,否則執行失敗幾個例子
//連接數據庫 int Connection_Sqlite3DataBase() {rc = sqlite3_open("./face_database/face.db", &db);if (rc != SQLITE_OK){fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));sqlite3_close(db);exit(1);}elseprintf("You have opened a sqlite3 database named bind.db successfully!\nCongratulation! Have fun!\n");return 0; } //將圖片插入到數據庫 void insert_face_data_toDataBase(const char *name, MByte *face_feature, MInt32 featureSize) {sqlite3_prepare(db, "insert into face_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); }總結
以上是生活随笔為你收集整理的Linux下轻量级数据库-SQLite3(嵌入式设备)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 万兆NAS存储网络组建方案
- 下一篇: 2019_ACL_Multimodal