標籤:linux sqlite 資料庫 arm c語言
一、安裝SQLite3方法
1、字元介面
sudo apt-get install sqlite3
2、圖形介面
sudo apt-get install sqliteman
二、SQLite資料類型
SQLite具有以下五種基礎資料型別 (Elementary Data Type):
1、integer:帶符號的整型(最多64位)。
2、real:8位元組表示的浮點類型。
3、text:字元類型,支援多種編碼(如UTF-8、UTF-16),大小無限制。
4、blob:任意類型的資料,大小無限制。
5、null:表示空值。
三、SQLite命令使用
1、建立、開啟資料庫:
sqlite3 *.db
提示:當*.db檔案不存在時,sqlite會建立並開啟資料庫檔案。當*.db檔案存在時,sqlite會開啟資料庫檔案。
2、退出資料庫命令:
.quit 或 .exit
注意:SQL的語句格式:所有的SQL語句都是以分號結尾的,SQL語句不區分大小寫。兩個減號“--”則代表注釋。
3、建立表:create 語句文法:
create table 表名稱 (列名稱1 資料類型, 列名稱2 資料類型, 列名稱3 資料類型, ...);建立一表格該表包含3列,列名分別是:“id”、“name”、“addr”。
在終端下輸入:create table persons (id integer, name text, addr text);
4、建立表:create 語句 (設定主鍵)
在用sqlite設計表時,每個表都可以通過primary key手動設定主鍵(整型),設定為主鍵的列資料不可以重複。文法:
create table 表名稱 (列名稱1 資料類型 primary key, 列名稱2 資料類型, 列名稱3 資料類型, ...);
在終端下輸入:create table persons (id integer primary key, name text, addr text);
5、查看錶: .tables 查看資料表的結構: .schema
6、修改表:alter語句
在已有的表中添加或刪除列。文法:(添加、刪除-sqlite3暫不支援)
alter table 表名 add 列名 資料類型;
在終端下輸入:alter table persons add sex text ;
7、刪除表:drop table語句
用於刪除表(表的結構、屬性以及表的索引也會被刪除)文法:drop table 表名稱;
在終端輸入:drop table persons ;
8、插入新行:inser into 語句(全部賦值)給一行中的所有列賦值。文法:insert into 表名 values (列值1, 列值2,列值3,列值4, ...);
注意:當列值為字串時要加上‘’號。
在終端下輸入:create table persons (id integer, name text, addr text);
insert into persons values (1, ‘lucy‘, ‘beijing‘);
9、插入新行:inser into 語句(部分賦值) 給一行中的部分列賦值。文法:insert into 表名 (列名1, 列名2, ...) values(列值1, 列值2, ...);
在終端下輸入:insert into persons (id, name) values (1, ‘peter‘);
10、修改表中的資料:update 語句
使用where根據匹配條件,尋找一行或多行,根據尋找的結果修改表中相應行的列值(修改哪一列由列名指定)。
文法:update 表名 set 列1 = 值1 [, 列2 = 值2, ...] [匹配條件];
注意:當表中有多列、多行符合匹配條件時會修改相應的多行。當匹配條件為空白時則匹配所有。
11、匹配:where 子句
where 子句用於規定匹配的條件:等於(=)、不等於(<>)、大於(>)、小於(<)、大於等於(>=)、小於等於(<=)。
匹配條件文法:(基礎) where 列名 操作符 列值
在終端輸入:update persons set id=2, addr=‘tianjing‘ where name=‘peter‘;
12、刪除表中的資料:delete 語句
使用where根據匹配條件,尋找一行或多行,根據尋找的結果刪除表中的尋找到的行。文法:delete from 表名 [匹配條件];
注意:當表中有多列、多行符合匹配條件時會刪除相應的多行。
在終端輸入:delete from persons where name=‘peter‘;
13、查詢:select 語句(基礎)
於從表中選取資料,結果被儲存在一個結果表中(稱為結果集)。文法:
1、select * from 表名 [匹配條件];
2、select 列名1[, 列名2, ...] from 表名 [匹配條件];
提示:星號(*)是選取所有列的萬用字元。
在終端輸入:insert into persons values (1, ‘peter‘, ‘tianjing‘);
insert into persons values (3, ‘bob‘, ‘hebei‘);
select * from persons;
select * from persons where id=1;
select name from persons;
select name from persons where id=1;
14、in 允許我們在 where 子句中規定多個值。匹配條件文法:where 列名 in (列值1, 列值2, ...)例:
1、select * from 表名 where 列名 in (值1, 值2, ...);
2、select 列名1[,列名2,...] from 表名 where列名 in (列值1, 列值2, ...)
在終端輸入:select * from persons where id in (1, 2);
select name from persons where id in (1, 2);
15、and 可在 where 子語句中把兩個或多個條件結合起來(多個條件之間是與的關係)。匹配條件文法:where 列1 = 值1 [and 列2 = 值2 and ...]例:
1、select * from 表名 where 列1 = 值1 [and列2 = 值2 and ...];
2、select 列名1[, 列名2, ...] from 表名where 列1 = 值1 [and 列2 = 值2 and ...];
在終端輸入:select * from persons where id=1 and addr=‘beijing‘;
select name from persons where id=1 and addr=‘beijing‘;
16、or 可在 where 子語句中把兩個或多個條件結合起來(多個條件之間是或的關係)。匹配條件文法:where 列1 = 值1 [or 列2 = 值2 or ...]例:
1、select * from 表名 where 列1 = 值1 [or 列2 = 值2 or ...];
2、select 列名1[,列名2,...] from 表名 列1 = 值1 [or 列2 = 值2 or ...];
在終端輸入:select * from persons where addr=‘beijing‘ or addr=‘hebei‘;
17、操作符 between A and B 會選取介於A、B之間的資料範圍。這些值可以是數值、文本或者日期。匹配條件文法:where 列名 between A and B例:
1、select * from 表名 where 列名 between A and B;
2、select 列名1[,列名2,...] from 表名 where列名 between A and B;
註:匹配字串時會以ascii順序匹配。
在終端輸入:select * from persons where id between 1 and 3;
select * from persons where addr between ‘a‘ and ‘c‘;
18、like 用於模糊尋找。匹配條件文法:where 列名 like 列值
1、若列值為數字相當於列名=列值。
2、若列值為字串可以用萬用字元“%”代表缺少的字元(一個或多個)。
在終端輸入:select * from persons where id like 3;
select * from persons where addr like ‘%jing%‘;
19、not 可取出原結果集的補集。匹配條件文法:例:
1、where 列名 not in (列值1, 列值2, ...)
2、 where not (列1 = 值1 [and 列2 = 值2 and...])
3、where not (列1 = 值1 [or 列2 = 值2 or ...])
4、where 列名 not between A and B
5、where 列名 not like 列值
在終端輸入:select * from persons where id not in ( 1 );
select * from persons where addr not like ‘%jing%‘;
20、order by 語句根據指定的列對結果集進行排序。預設按照升序對結果集進行排序,可使用 desc 關鍵字按照降序對結果集進行排序。例:
升序 : select * from 表名 order by 列名;
降序 : select * from 表名 order by 列名 desc;
在終端輸入:select * from persons order by name;
select * from persons order by id;
select * from persons order by id desc;
四、SQLite C語言編程
1、int sqlite3_open(char *db_name,sqlite3 **db);
功能:開啟資料庫。
參數:db_name:資料庫檔案名,若檔案名稱包含ASCII碼錶範圍的之外的字元,則其必需是(UTF-8)編碼。
sqlite3:資料庫標識,此結構體為資料庫操作控制代碼。通過此控制代碼可對資料庫檔案進行相應操作。
返回值:成功返回SQLITE_OK,失敗返回非 SQLITE_OK。
2、int sqlite3_close(sqlite3 *db);
功能:關閉資料庫、釋放開啟資料庫時申請的資源。
參數:db:資料庫的標識。
返回值:成功返回 SQLITE_OK。失敗返回非 SQLITE_OK。
注意:sqlite3使用了兩個庫:pthread、dl,故連結時應加上 -lpthread和 -ldl。
3、sqlite3_exec函數:int sqlite3_exec(sqlite3 *db, const char *sql,exechandler_t callback,void *arg, char **errmsg);
功能:執行sql指向的SQL語句,若結果集不為空白,函數會調用函數指標callback所指向的函數。
參數:db:資料庫的標識。
sql:SQL語句(一條或多條),以’;’結尾。
callback:是回呼函數指標,當這條語句執行之後,sqlite3會去調用你提供的這個函數。
arg:當執行sqlite3_exec的時候傳遞給回呼函數的參數。
errmsg:存放錯誤資訊的地址,執行失敗後可以查閱這個指標。
列印錯誤資訊方法:printf("%s\n", errmsg);
4、回呼函數指標:typedef int (*exechandler_t)(void *para, int n_column, char **column_value,char **column_name);
功能:此函數由使用者定義,當sqlite3_exec函數執行sql語句後,結果集不為空白時sqlite3_exec函數會自動調用此函數,每次調用此函數時會把結果集的一行資訊傳給此函數。
參數:para:sqlite3_exec傳給此函數的參數,para為任意 資料類型的地址。
n_column:結果集的列數。
column_value:指標數組的地址,其存放一行資訊中 各個列值的首地址。
column_name:指標數組的地址,其存放一行資訊中各 個列值對應列名的首地址。
返回值:若為非0值,則通知sqlite3_exec終止回調。
5、sqlite3_get_table函數:int sqlite3_get_table(sqlite3 *db, const char *sql,char ***resultp, int *nrow,int *ncolumn,char **errmsg);
功能:執行sql指向的SQL語句,函數將結果集相關的資料的地址儲存在函數的參數中。
參數:db:資料庫的標識。
sql:SQL語句(一條或多條),以’;’結尾。
resultp:指標數組的地址,其記錄了結果集的資料。記憶體布局:先依次存放各列的列名,然後是每一行各列的值。
nrow:結果集的行數(不包含列名)。
ncolumn:結果集的列數。
errmsg:錯誤資訊。
6、sqlite3_free_table函數:void sqlite3_free_table(char **resultp);
功能:釋放sqlite3_get_table分配的記憶體。
參數:結果集資料的首地址。
SQLite資料庫使用