国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > sqlite3數(shù)據(jù)庫常用指令及函數(shù)接口介紹

sqlite3數(shù)據(jù)庫常用指令及函數(shù)接口介紹 時(shí)間:2018-07-30      來源:未知

【1】 sqlite3的安裝:

1.離線安裝:sudo dpkg -i *.deb

2.在線安裝: sudo apt-get install sqlite3

sudo apt-get install libsqlite3-dev

【2】 sqlite3的基本命令:

1.系統(tǒng)命令:

以‘.’(點(diǎn))開頭的命令

.help 幫助

.quit 退出

.exit 退出

.schema 查看標(biāo)的結(jié)構(gòu)圖

.databases 查看打開的數(shù)據(jù)庫

.table 查看表

2.sql命令:

不以‘.’(點(diǎn))開頭,但是需要以‘;’(分號)結(jié)尾;

1)創(chuàng)建一張數(shù)據(jù)的表

create table student(no Integer,name char,score float);

數(shù)據(jù)類型:

Integer 整型

char 字符串,也可以用string

...

2)插入一條數(shù)據(jù):

完整數(shù)據(jù)插入:

insert into student values(1, ‘zhangsan', 80);

注意:字符串zhangsan既可以用單引號‘zhangsan’,也可以用雙引號“zhangsan”;

部分?jǐn)?shù)據(jù)插入:

insert into student (no,name) values(2, 'lisi');

3)查詢記錄

完整數(shù)據(jù)查詢:

select * from student;

部分?jǐn)?shù)據(jù)查詢:

select no,name from student;

按照條件查詢:

select * from student where score=100;

select * from student where no=1 and score=100;

select * from student where no=1 or score=100;

4)刪除記錄:

刪除某一條記錄:

delete from student where name='lisi';

刪除整張表數(shù)據(jù):

delete from student;

5)更新記錄:

update student set name=‘lisi’ where id=3;

update student set name='lisi',score=80 where id=2;

6)在表中增加一列

alter table student add column address char

7)在表中刪除一列:

不支持直接刪一列:

1)創(chuàng)建一個新的表并從原有表中提取字段;

create table stu as select id, name, score from student;

2)刪除原有的表格;

drop table student;

3)將新的表格名字改為原有表的名字

alter table stu rename to student;

【3】 sqlite3函數(shù)接口:

int sqlite3_open(

const char *filename, /* Database filename (UTF-8) 要操作的數(shù)據(jù)庫文件的路徑;*、

sqlite3 **ppDb /* OUT: SQLite db handle */

);

功能:打開一個數(shù)據(jù)庫;

參數(shù):

filename: 代表數(shù)據(jù)庫的路徑名;

ppdb: 代表數(shù)據(jù)庫的操作句柄(指針);

返回值:成功-SQLITE_OK,出錯-錯誤碼;

int sqlite3_close(sqlite3*);

功能:關(guān)閉數(shù)據(jù)庫

參數(shù):

db :操作數(shù)據(jù)庫的句柄;

返回值:成功-SQLITE_OK,出錯-錯誤碼;

const char *sqlite3_errmsg(sqlite3*);

功能:通過db句柄,得到數(shù)據(jù)庫操作的錯誤信息;

返回值:錯誤信息的首地址;

/********************************************************

int sqlite3_exec(

sqlite3*, /* An open database */

const char *sql, /* SQL to be evaluated */

int (*callback)(void*,int,char**,char**), /* Callback function */

void *, /* 1st argument to callback */

char **errmsg /* Error msg written here */

);

功能:執(zhí)行一條sql語句;

參數(shù):

db :數(shù)據(jù)庫操作句柄;

sql :一條sql語句;

callback:只有sql為查詢語句的時(shí)候,才會執(zhí)行此語句;

arg :給回調(diào)函數(shù)callback傳遞參數(shù);

errmsg :錯誤消息

返回值:成功-SQLITE_OK,出錯-錯誤碼;

int (*callback)(void *arg, int, char **, char **); /* Callback function */

功能:查詢的結(jié)果,是一個函數(shù)指針類型,傳遞一個函數(shù)名即可。

參數(shù):

para :傳遞給回調(diào)函數(shù)的參數(shù);

f_num :記錄中包含的字段數(shù)目;

f_value :包含每個字段值的指針數(shù)組;

f_name :包含每個字段名稱的指針數(shù)組

返回值:成功返回0,失敗返回-1;

***********************************************************/

查詢數(shù)據(jù):

int sqlite3_get_table(

sqlite3 *db, /* An open database */

const char *zSql, /* SQL to be evaluated */

char ***pazResult, /* Results of the query */

int *pnRow, /* Number of result rows written here */

int *pnColumn, /* Number of result columns written here */

char **pzErrmsg /* Error msg written here */

);

功能,查詢表中數(shù)據(jù)

參數(shù):

db :數(shù)據(jù)庫操作句柄

zSql :查詢的sql語句

pazResult :查詢結(jié)果的返回地址;

pnRow :滿足條件的記錄數(shù)目(表中的行數(shù))

pnColumn:每條記錄包含的字段數(shù)目(表中的列數(shù))

pzErrmsg:錯誤信息指針的地址;

返回值:成功返回0,失敗返回錯誤碼。

void sqlite3_free_table(char **result);

sqlite3 語句總結(jié)

1、

sqlite3長用于 輕量級的數(shù)據(jù)存儲,象單片機(jī)這一類,但是現(xiàn)在的sqlite3,已經(jīng)很先進(jìn),不能小看

2、sqlite3常用命令

當(dāng)前目錄下建立或打開test.db數(shù)據(jù)庫文件,并進(jìn)入sqlite命令終端,以sqlite>前綴標(biāo)識:

#sqlite3 test.db

查看數(shù)據(jù)庫文件信息命令(注意命令前帶字符'.'):

sqlite>.database

查看所有表的創(chuàng)建語句:

sqlite>.schema

查看指定表的創(chuàng)建語句:

sqlite>.schema table_name

以sql語句的形式列出表內(nèi)容:

sqlite>.dump table_name

設(shè)置顯示信息的分隔符:

sqlite>.separator symble

Example:設(shè)置顯示信息以‘:’分隔

sqlite>.separator :

設(shè)置顯示模式:

sqlite>.mode mode_name

Example:默認(rèn)為list,設(shè)置為column,其他模式可通過.help查看mode相關(guān)內(nèi)容

sqlite>.mode column

輸出幫助信息:

sqlite>.help

設(shè)置每一列的顯示寬度:

sqlite>.width width_value

Example:設(shè)置寬度為2

sqlite>.width 2

列出當(dāng)前顯示格式的配置:

sqlite>.show

退出sqlite終端命令:

sqlite>.quit

sqlite>.exit

3、sqlite3指令

sql的指令格式:所有sql指令都是以分號(;)結(jié)尾,兩個減號(--)則表示注釋。

如:

sqlite>create studen_table(Stu_no interger PRIMARY KEY, Name text NOT NULL, Id interger UNIQUE, Age interger CHECK(Age>6), School text DEFAULT 'xx小學(xué));

該語句創(chuàng)建一個記錄學(xué)生信息的數(shù)據(jù)表。

3.1 sqlite3存儲數(shù)據(jù)的類型

NULL:標(biāo)識一個NULL值

INTERGER:整數(shù)類型

REAL:浮點(diǎn)數(shù)

TEXT:字符串

BLOB:二進(jìn)制數(shù)

3.2 sqlite3存儲數(shù)據(jù)的約束條件

Sqlite常用約束條件如下:

PRIMARY KEY - 主鍵:

1)主鍵的值必須唯一,用于標(biāo)識每一條記錄,如學(xué)生的學(xué)號

2)主鍵同時(shí)也是一個索引,通過主鍵查找記錄速度較快

3)主鍵如果是整數(shù)類型,該列的值可以自動增長

NOT NULL - 非空:

約束列記錄不能為空,否則報(bào)錯

UNIQUE - 唯一:

除主鍵外,約束其他列的數(shù)據(jù)的值唯一

CHECK - 條件檢查:

約束該列的值必須符合條件才可存入

DEFAULT - 默認(rèn)值:

列數(shù)據(jù)中的值基本都是一樣的,這樣的字段列可設(shè)為默認(rèn)值

3.3 sqlite3常用指令

1)建立數(shù)據(jù)表

create table table_name(field1 type1, field2 type1, ...);

table_name是要創(chuàng)建數(shù)據(jù)表名稱,fieldx是數(shù)據(jù)表內(nèi)字段名稱,typex則是字段類型。

例,建立一個簡單的學(xué)生信息表,它包含學(xué)號與姓名等學(xué)生信息:

create table student_info(stu_no interger primary key, name text);

create table if not exists 表名(字段名1,字段名2...);

2)添加數(shù)據(jù)記錄

insert into table_name(field1, field2, ...) values(val1, val2, ...);

valx為需要存入字段的值。

例,往學(xué)生信息表添加數(shù)據(jù):

Insert into student_info(stu_no, name) values(0001, alex);

3)修改數(shù)據(jù)記錄

update table_name set field1=val1, field2=val2 where expression;

where是sql語句中用于條件判斷的命令,expression為判斷表達(dá)式

例,修改學(xué)生信息表學(xué)號為0001的數(shù)據(jù)記錄:

update student_info set stu_no=0001, name=hence where stu_no=0001;

4)刪除數(shù)據(jù)記錄

delete from table_name [where expression];

不加判斷條件則清空表所有數(shù)據(jù)記錄。

例,刪除學(xué)生信息表學(xué)號為0001的數(shù)據(jù)記錄:

delete from student_info where stu_no=0001;

5)查詢數(shù)據(jù)記錄

select指令基本格式:

select columns from table_name [where expression];

a查詢輸出所有數(shù)據(jù)記錄

select * from table_name;

b限制輸出數(shù)據(jù)記錄數(shù)量

select * from table_name limit val;

c升序輸出數(shù)據(jù)記錄

select * from table_name order by field asc;

d降序輸出數(shù)據(jù)記錄

select * from table_name order by field desc;

e條件查詢

select * from table_name where expression;

select * from table_name where field in ('val1', 'val2', 'val3');

select * from table_name where field between val1 and val2;

f查詢記錄數(shù)目

select count (*) from table_name;

g區(qū)分列數(shù)據(jù)

select distinct field from table_name;

有一些字段的值可能會重復(fù)出現(xiàn),distinct去掉重復(fù)項(xiàng),將列中各字段值單個列出。

6)建立索引

當(dāng)說數(shù)據(jù)表存在大量記錄,索引有助于加快查找數(shù)據(jù)表速度。

create index index_name on table_name(field);

例,針對學(xué)生表stu_no字段,建立一個索引:

create index student_index on student_table(stu_no);

建立完成后,sqlite3在對該字段查詢時(shí),會自動使用該索引。

7)刪除數(shù)據(jù)表或索引

drop table table_name;

drop index index_name;

打開數(shù)據(jù)庫鏈接sqlite3_open用法

原型:

int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ )

用這個函數(shù)開始數(shù)據(jù)庫操作。需要傳入兩個參數(shù),一是數(shù)據(jù)庫文件名,比如:E:/test.db。文件名不需要一定存在,如果此文件不存在,sqlite會自動建立它。如果它存在,就嘗試把它當(dāng)數(shù)據(jù)庫文件來打開。二是sqlite3**,即前面提到的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。這個結(jié)構(gòu)底層細(xì)節(jié)如何,你不要管它。函數(shù)返回值表示操作是否正確,如果是SQLITE_OK則表示操作正常。相關(guān)的返回值sqlite定義了一些宏。具體這些宏的含義可以參考sqlite3.h 文件。里面有詳細(xì)定義(順便說一下,sqlite3 的代碼注釋率自稱是非常高的,實(shí)際上也的確很高。只要你會看英文,sqlite 可以讓你學(xué)到不少東西)。

關(guān)閉數(shù)據(jù)庫鏈接sqlite3_close用法

原型:

int sqlite3_close(sqlite3 *ppDb)

Db為剛才使用sqlite3_open打開的數(shù)據(jù)庫鏈接

執(zhí)行sql操作sqlite3_exec用法

原型:

int sqlite3_exec( sqlite3* ppDb, /* An open database */ const char *sql, /* SQL to be evaluated */ int (*callback)(void*,int,char**,char**), /* Callback function */ void *, /* 1st argument to callback */ char **errmsg /* Error msg written here */ )

這就是執(zhí)行一條sql 語句的函數(shù)。第1個參數(shù)不再說了,是前面open函數(shù)得到的指針。說了是關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。第2個參數(shù)constchar*sql是一條sql 語句,以\0結(jié)尾。第3個參數(shù)sqlite3_callback 是回調(diào),當(dāng)這條語句執(zhí)行之后,sqlite3會去調(diào)用你提供的這個函數(shù)。第4個參數(shù)void*是你所提供的指針,你可以傳遞任何一個指針參數(shù)到這里,這個參數(shù)最終會傳到回調(diào)函數(shù)里面,如果不需要傳遞指針給回調(diào)函數(shù),可以填NULL。等下我們再看回調(diào)函數(shù)的寫法,以及這個參數(shù)的使用。第5個參數(shù)char** errmsg 是錯誤信息。注意是指針的指針。sqlite3里面有很多固定的錯誤信息。執(zhí)行sqlite3_exec 之后,執(zhí)行失敗時(shí)可以查閱這個指針(直接cout<

exec 的回調(diào)

typedef int(*sqlite3_callback)(void*,int,char**,char**);你的回調(diào)函數(shù)必須定義成上面這個函數(shù)的類型。下面給個簡單的例子://sqlite3的回調(diào)函數(shù)//sqlite 每查到一條記錄,就調(diào)用一次這個回調(diào)int LoadMyInfo(void* para,intn_column,char** column_value,char** column_name)

//para是你在sqlite3_exec 里傳入的void*參數(shù)通過para參數(shù),你可以傳入一些特殊的指針(比如類指針、結(jié)構(gòu)指針),//然后在這里面強(qiáng)制轉(zhuǎn)換成對應(yīng)的類型(這里面是void*類型,必須強(qiáng)制轉(zhuǎn)換成你的類型才可用)。然后操作這些數(shù)據(jù)//n_column是這一條記錄有多少個字段(即這條記錄有多少列)//char** column_value 是個關(guān)鍵值,查出來的數(shù)據(jù)都保存在這里,它實(shí)際上是個1維數(shù)組(不要以為是2維數(shù)組),//每一個元素都是一個char*值,是一個字段內(nèi)容(用字符串來表示,以\0結(jié)尾)//char** column_name 跟column_value是對應(yīng)的,表示這個字段的字段名稱

實(shí)例:

#include using namespace std; #include "sqlite/sqlite3.h" int callback(void*,int,char**,char**); int main() { sqlite3* db; int nResult = sqlite3_open("test.db",&db); if (nResult != SQLITE_OK) { cout<<"打開數(shù)據(jù)庫失。"<

上一篇:socket網(wǎng)絡(luò)編程基礎(chǔ)

下一篇:網(wǎng)絡(luò)編程實(shí)驗(yàn)一-TCP通信

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號-5,京公海網(wǎng)安備11010802025203號

回到頂部