在嵌入式設備的開發中,sqlite數據庫是非常常用的,雖然聽着很高大上,但是實際開發難度不是很大,主要對它的函數要使用熟練。那麼它到底是一個什麼東西?
一. 數據庫基本概念
數據庫是在數據庫管理系統管理和控制之下,存放在存儲介質上的數據集合。
說的好難理解,其實就是個類似excel一樣的東西,方便我們增刪改查數據。
二. 常用的數據庫
大型數據庫
Oracle關係數據庫(甲骨文產品的市場佔有率高)。
IBM 的DB2(第一個具備網上功能的多媒體關係數據庫管理系統,跨平臺性強)
中型數據庫
微軟Server數據庫(主要支持windows平臺)
小型數據庫
mySQL 開源關係數據庫,但是對於嵌入式還是比較大
說了那麼多,就是了解一下就完了,我們嵌入式中就是用SQLite
三. sqlite(輕量級的嵌入式數據庫)
1. 特性
- 低內存佔用率(全部源碼大致3萬行c代碼,250KB)
- 跨平臺可移植性
- 多語言支持
- 支持數據庫大小至2TB;
- 免費開源
- 比目前流行的大多數數據庫對數據的操作要快
這部分是誇自己呢,可以忽略,用它就對了!!
2.數據庫的使用
上面說了半天,瞭解下就行了,這節纔開始對這個東西的使用。那麼這個東西怎麼開始呢?
不急,先舉個例子。
我們平時都玩電腦,假如你們老闆讓你統計一下你們公司所有同事的個人信息,姓名,身高啊,體重啊你該怎麼做?
這很簡單啊首先要在我們的電腦上下載個WPS軟件(我是盜版沒原裝的),然後安裝到我的電腦上,然後打開WPS,新建一個excel表格,然後按照姓名,身高,體重等信息填到表格中,依次將每個員工插入,當然也會有信息需要修改的情況,人家離職了你要刪去的情況等(增刪改查),其實我們的數據庫的使用過程也是一樣的。
說到這,你會說這麼簡單啊,我都會,不用再學了。
但是人家是輕量級的數據庫,哪有什麼圖形界面讓你操作,在我們的Linux下肯定要使用命令來進行操作啊,這多酷。
2.1Sqlite的安裝(不明白,複習下linux包管理章節)
方法一:本地安裝,官網下載安裝包放到本地(db文件),然後解壓安裝sudo dpkg -i *.deb
方法二:在線安裝(有網)sudo apt-get install sqlite3
有時還要裝兩個依賴庫:sudo apt-get install libsqlite3-dev
sudo apt-get install sqlitebrowser
然後進入輸入sqlite3,有打印信息輸出,說明安裝成功。
2.2 數據庫的命令行操作
注:sqlite中的命令格式分爲兩種,
第一種系統命令 都以 '.' 開頭。
此時打開進入sqlite軟件,
1>退出,輸入 .quit(或者 .exit)
2>查看sqlite支持哪些命令,輸入 .help進行查看。
3>顯示當前打開的數據庫文件 .database
4>顯示數據庫中所有表名 .tables
5>查看錶的結構 .schema
6>創建一個數據庫 (庫裏面可以建很多表類似於建個文件夾,裏面有很多excel表)
sqlite3 student.db //建了一個名爲student的庫
第二種是sql語句, 都以 ‘;’ 結尾。(sqlite3 數據庫的增刪改查)
1> 表格創建
create table stuinfo (id integer, name char, score float);
創建了一個名爲stuinfo的表格,然後裏面有編號,姓名,分數信息(對應表頭)
這裏面的數據類型,它做了一個對應
他的INTEGER 對應了我們的int.
REAL對應了我們的float
TEXT 對應char
2>向表格種插入數據記錄。(增)
insert into stuinfo values(1001, 'zhangsan', 18, 80); //第一種插入形式
insert into stuinfo (id, name, score) values(1002, 'lisi', 90); //第二種形式
3>刪除一條記錄(刪)
delete from stuinfo where id=1001 and name='zhangsan';
4>更新一條記錄(改)
update stuinfo set name='wangwu', score = 82 where id=1002;
5>查看數據庫記錄
select * from stuinfo;
select * from stuinfo where score = 80;
select * from stuinfo where score = 80 and name= 'zhangsan';
select name,score from stuinfo; 查詢指定的字段
select * from stuinfo where score >= 85 and score < 90;
6>增加一列
alter table stuinfo add column address char; //增加一列地址
7>刪除一列
sqlite種沒有刪除列操作,如果想刪除表A中的一列或者一行,首先通過SQL創建一個臨時表,然後把表A中期望保留的數據存儲到臨時表中,然後把表A刪除,再將臨時表重命名爲A.
create table stu as select id, name from stuinfo; //創建一個stu表將stuinfo中的姓名等信息保留到stu表中。
drop table stuinfo;//刪除stuinfo表中的數據
alter table stu rename to stuinfo; //在將stu表重命名爲stuinfo
8 >數據庫表的維護(有了增刪改查,其實我們在用excel的時候也注意到了ID自增等的一些操作)
比如我們在使用中ID啊都要求唯一,就需要輸入一些關鍵字進行限定。
數據庫主鍵(設置的數據將會是唯一的存在)
PRIMARY KEY
自增字段(設置的字段值自動遞增)
AUTOONCREMENT
這個關鍵字只能用於整型(INTEGER)字段
2.3 數據庫的編程API
上面我們說了一下在linux下的命令行操作數據庫的一些指令,下面說一下它的編程API接口。
只說幾個常用的,其他的可以查詢sqlite 的API手冊
1>打開數據庫
函數名 |
int sqlite3_open(const char *filename, sqlite3 **ppDb); |
||||
傳入參數 |
|
||||
返回值 |
成功返回0,失敗返回錯誤碼(非零值) |
2>關閉數據庫
函數名 |
int sqlite3_close(sqlite3 *db);
|
||
傳入參數 |
|
||
返回值 |
成功返回0,失敗返回錯誤碼 |
3>返回數據庫錯誤信息
函數名 |
const char *sqlite3_errmg(sqlite3 *db);
|
||
傳入參數 |
|
||
返回值 |
返回錯誤信息 |
4>執行SQL語句操作(重點,且常用)
函數名 |
int sqlite3_exec(sqlite3* db, const char *sql, int (*callback)(void* arg,int,char**,char**), void * arg, char **errmsg ); |
||||||||||
傳入參數 |
|
||||||||||
返回值 |
成功返回0,失敗返回錯誤碼 |
查詢回調函數(幫助在數據庫中檢索信息)
函數名 |
int (*callback)(void* arg,int ncolumns ,char** f_value,char** f_name) |
||||||||
傳入參數 |
|
||||||||
返回值 |
成功返回0 |
5>不使用回調函數執行SQL語句
函數名 |
int sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int*nrow, int *ncolumn, char **errmsg);
|
||||||||||||
傳入參數 |
|
||||||||||||
返回值 |
成功返回0,失敗返回錯誤碼 |
下面舉個例子,就可以快速應用這些知識點了: