49.SQLite 數據庫 編程

在嵌入式設備的開發中,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.數據庫的編程API

上面我們說了一下在linux下的命令行操作數據庫的一些指令,下面說一下它的編程API接口。

只說幾個常用的,其他的可以查詢sqlite 的API手冊

 

1>打開數據庫

函數名

int sqlite3_open(const char *filename, sqlite3 **ppDb);

傳入參數

filename:

ppDb

數據庫名稱

指向sqlite句柄的指針

返回值

成功返回0,失敗返回錯誤碼(非零值)

 

2>關閉數據庫

函數名

int   sqlite3_close(sqlite3 *db);

 

傳入參數

db:

指向sqlite句柄的指針

返回值

成功返回0,失敗返回錯誤碼

 

3>返回數據庫錯誤信息

函數名

const  char  *sqlite3_errmg(sqlite3 *db);  

   

傳入參數

db

指向sqlite句柄的指針

返回值

返回錯誤信息

 

4>執行SQL語句操作(重點,且常用)

函數名

int sqlite3_exec(sqlite3* db, const char *sql, int (*callback)(void* arg,int,char**,char**),  void * arg,                                  

  char **errmsg                               );

傳入參數

db

sql

callback

arg

errmasg

指向sqlite句柄的指針

將要被執行sql語句

回調函數

只有在查詢時,才能給回調函數傳參

爲callback傳參用

錯誤信息指針的地址

返回值

成功返回0,失敗返回錯誤碼

                       查詢回調函數(幫助在數據庫中檢索信息)

函數名

int (*callback)(void* arg,int ncolumns ,char** f_value,char** f_name)

傳入參數

arg

ncolumns

f_value

f_name

接收sqlite3_exec 傳遞來的參數

列數

列的地址(指針數組)

列的名稱(指針數組)

返回值

成功返回0

 

5>不使用回調函數執行SQL語句

函數名

int   sqlite3_get_table(sqlite3 *db, const  char  *sql,  char ***resultp,  int*nrow,  int *ncolumn, char **errmsg);

 

傳入參數

db

sql

resultp

nrow

ncolumn

errmsg

數據庫句柄

SQL語句

用來指向sql執行結果的指針

滿足條件的記錄的數目

每條記錄包含的字段數目

錯誤信息指針的地址

返回值

成功返回0,失敗返回錯誤碼

 

下面舉個例子,就可以快速應用這些知識點了:

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章