久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 學習筆記 > sqlite3數據庫常(chang)用指令及函數接口介紹(shao)

sqlite3數(shu)據(ju)庫常(chang)用指令及函數(shu)接口介紹 時間:2018-07-30      來源(yuan):未知

【1】 sqlite3的安(an)裝(zhuang):

1.離(li)線(xian)安(an)裝:sudo dpkg -i *.deb

2.在(zai)線安(an)裝: sudo apt-get install sqlite3

sudo apt-get install libsqlite3-dev

【2】 sqlite3的(de)基本命令:

1.系統命令:

以‘.’(點)開頭(tou)的命令

.help 幫助

.quit 退(tui)出

.exit 退出(chu)

.schema 查(cha)看標的結構圖

.databases 查看打開(kai)的數據庫(ku)

.table 查看表

2.sql命令:

不以(yi)‘.’(點(dian))開頭,但是(shi)需要(yao)以(yi)‘;’(分號)結尾;

1)創建一張數據(ju)的(de)表

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

數據類型:

Integer 整型(xing)

char 字符串,也可以用string

...

2)插入一(yi)條數據:

完(wan)整數據插入(ru):

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

注意:字(zi)符串zhangsan既(ji)可(ke)以用(yong)單(dan)引號‘zhangsan’,也(ye)可(ke)以用(yong)雙引號“zhangsan”;

部分數據插入:

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

3)查詢記錄

完整數據查詢:

select * from student;

部分(fen)數(shu)據查(cha)詢:

select no,name from student;

按照(zhao)條件查詢:

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)刪除記錄:

刪除某(mou)一條記錄:

delete from student where name='lisi';

刪(shan)除整張表數據(ju):

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)在表中刪除一列:

不支持直(zhi)接刪一列:

1)創建一(yi)個新的表(biao)并從原有表(biao)中提取字(zi)段;

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

2)刪除(chu)原有的表(biao)格;

drop table student;

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

alter table stu rename to student;

【3】 sqlite3函數接口:

int sqlite3_open(

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

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

);

功(gong)能:打開一個數據庫(ku);

參數:

filename: 代表數據庫(ku)的路(lu)徑名;

ppdb: 代表數(shu)據庫的操作句柄(指(zhi)針);

返回值(zhi):成功(gong)-SQLITE_OK,出(chu)錯-錯誤碼;

int sqlite3_close(sqlite3*);

功能:關閉數據庫

參數:

db :操作數據庫的(de)句柄;

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

const char *sqlite3_errmsg(sqlite3*);

功能:通(tong)過(guo)db句柄,得(de)到數據庫(ku)操作(zuo)的錯誤信息;

返(fan)回值(zhi):錯誤信息的首地(di)址;

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

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 */

);

功(gong)能:執行一條sql語(yu)句;

參數:

db :數據庫(ku)操(cao)作句柄;

sql :一條sql語(yu)句(ju);

callback:只有sql為查詢語句的時候(hou),才會(hui)執(zhi)行此(ci)語句;

arg :給回調(diao)函數(shu)callback傳遞參(can)數(shu);

errmsg :錯(cuo)誤消息

返(fan)回值(zhi):成功(gong)-SQLITE_OK,出錯-錯誤碼;

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

功能(neng):查(cha)詢的(de)結果,是一個函數(shu)指(zhi)針類型,傳遞一個函數(shu)名即可。

參數:

para :傳遞給回調函數(shu)的(de)參數(shu);

f_num :記(ji)錄(lu)中包(bao)含的字段數目;

f_value :包含每個字段值的指針數組;

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

返(fan)回(hui)值:成功返(fan)回(hui)0,失(shi)敗返(fan)回(hui)-1;

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

查詢數據:

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 */

);

功能,查詢表中數據

參數:

db :數據庫操作句柄

zSql :查詢的sql語句

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

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

pnColumn:每條(tiao)記錄(lu)包含的字段(duan)數目(表(biao)中的列(lie)數)

pzErrmsg:錯誤信(xin)息指針(zhen)的地址;

返回(hui)值:成功返回(hui)0,失敗返回(hui)錯(cuo)誤(wu)碼。

void sqlite3_free_table(char **result);

sqlite3 語句總(zong)結(jie)

1、

sqlite3長(chang)用于 輕量級(ji)的數據存儲,象單片機這一類,但是現(xian)在的sqlite3,已經很先進,不能(neng)小看

2、sqlite3常用命(ming)令

當前目(mu)錄下(xia)建立或打(da)開test.db數據庫文件,并進入sqlite命(ming)令終端,以sqlite>前綴標識:

#sqlite3 test.db

查看數據庫(ku)文件(jian)信息(xi)命(ming)令(注意命(ming)令前帶字符'.'):

sqlite>.database

查(cha)看(kan)所有表(biao)的創建語句(ju):

sqlite>.schema

查(cha)看指定表的創建(jian)語(yu)句:

sqlite>.schema table_name

以sql語句的形式列出表內容:

sqlite>.dump table_name

設(she)置(zhi)顯示信息的分隔符:

sqlite>.separator symble

Example:設置顯示信息以‘:’分隔

sqlite>.separator :

設(she)置顯(xian)示模式:

sqlite>.mode mode_name

Example:默認為list,設置為column,其他模式可通過.help查看mode相(xiang)關內容(rong)

sqlite>.mode column

輸出幫助信息:

sqlite>.help

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

sqlite>.width width_value

Example:設置(zhi)寬度(du)為2

sqlite>.width 2

列出當前顯示格式的配(pei)置:

sqlite>.show

退出sqlite終端命令:

sqlite>.quit

sqlite>.exit

3、sqlite3指(zhi)令

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

如:

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小學(xue));

該語(yu)句創建(jian)一個記錄學(xue)生信息的數據表(biao)。

3.1 sqlite3存儲數(shu)據的類型

NULL:標識一個NULL值

INTERGER:整數類型(xing)

REAL:浮點數

TEXT:字符(fu)串

BLOB:二進制(zhi)數

3.2 sqlite3存儲數據的(de)約束條(tiao)件

Sqlite常用約束條件如下(xia):

PRIMARY KEY - 主(zhu)鍵:

1)主鍵的值(zhi)必須(xu)唯一(yi),用于標識每一(yi)條記錄(lu),如學生的學號

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

3)主鍵如(ru)果是整數(shu)類型,該列的值可(ke)以自動增長(chang)

NOT NULL - 非空(kong):

約(yue)束列記錄(lu)不(bu)能為空(kong),否則(ze)報錯(cuo)

UNIQUE - 唯一:

除主(zhu)鍵外,約束其他列的數據(ju)的值唯一

CHECK - 條件檢查(cha):

約束該(gai)列的值必須符合條件才可(ke)存入(ru)

DEFAULT - 默認值:

列數據中的值基本(ben)都是一樣的,這樣的字段列可設(she)為(wei)默認值

3.3 sqlite3常(chang)用指令(ling)

1)建立數據表(biao)

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

table_name是要創建數據(ju)表名稱,fieldx是數據(ju)表內字段(duan)名稱,typex則(ze)是字段(duan)類型(xing)。

 例(li),建立一個簡(jian)單的學(xue)生(sheng)(sheng)信息表(biao),它(ta)包含學(xue)號(hao)與姓名等學(xue)生(sheng)(sheng)信息:

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

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

2)添加數據(ju)記錄

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

valx為需要存入字段的值。

例,往(wang)學生(sheng)信息表添(tian)加數(shu)據:

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

3)修改(gai)數據(ju)記錄

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

where是sql語句(ju)中用(yong)于條(tiao)件判(pan)斷的命(ming)令,expression為判(pan)斷表達(da)式

例,修(xiu)改學(xue)生信息(xi)表學(xue)號為0001的(de)數(shu)據記(ji)錄:

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

4)刪(shan)除數(shu)據記錄

delete from table_name [where expression];

不加判斷條(tiao)件則(ze)清空表所有數(shu)據記(ji)錄。

例(li),刪除學生信(xin)息表學號為0001的數據記錄:

delete from student_info where stu_no=0001;

5)查詢數據記錄

select指令(ling)基本格式(shi):

select columns from table_name [where expression];

a查詢輸出所(suo)有數據記錄

select * from table_name;

b限制輸出數據(ju)記錄數量(liang)

select * from table_name limit val;

c升序(xu)輸出數(shu)據記錄

select * from table_name order by field asc;

d降序輸出數據(ju)記錄

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查詢記錄數目

select count (*) from table_name;

g區分列(lie)數據

select distinct field from table_name;

有一些字段(duan)的值(zhi)可能(neng)會重復(fu)(fu)出現,distinct去掉(diao)重復(fu)(fu)項,將列中各字段(duan)值(zhi)單個(ge)列出。

6)建立(li)索(suo)引

當說數據表(biao)存在大量記錄,索(suo)引有(you)助于加快(kuai)查(cha)找(zhao)數據表(biao)速度。

create index index_name on table_name(field);

例,針對學(xue)生表stu_no字段(duan),建(jian)立一個索(suo)引:

create index student_index on student_table(stu_no);

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

7)刪除數據表或索引

drop table table_name;

drop index index_name;

打開數據庫鏈(lian)接sqlite3_open用法

原型:

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

用這個(ge)(ge)函數(shu)開始數(shu)據(ju)庫操作(zuo)(zuo)。需要(yao)傳(chuan)入兩個(ge)(ge)參數(shu),一是(shi)(shi)數(shu)據(ju)庫文(wen)(wen)件名,比如(ru):E:/test.db。文(wen)(wen)件名不(bu)需要(yao)一定存在(zai),如(ru)果此(ci)文(wen)(wen)件不(bu)存在(zai),sqlite會(hui)自動(dong)建(jian)立(li)它(ta)(ta)。如(ru)果它(ta)(ta)存在(zai),就嘗(chang)試把它(ta)(ta)當數(shu)據(ju)庫文(wen)(wen)件來打開。二是(shi)(shi)sqlite3**,即(ji)前(qian)面(mian)提(ti)到的(de)(de)關(guan)鍵數(shu)據(ju)結構。這個(ge)(ge)結構底層細節如(ru)何,你不(bu)要(yao)管它(ta)(ta)。函數(shu)返(fan)回值(zhi)表(biao)示(shi)操作(zuo)(zuo)是(shi)(shi)否正(zheng)確,如(ru)果是(shi)(shi)SQLITE_OK則表(biao)示(shi)操作(zuo)(zuo)正(zheng)常(chang)。相關(guan)的(de)(de)返(fan)回值(zhi)sqlite定義了一些宏(hong)。具(ju)體這些宏(hong)的(de)(de)含義可以(yi)(yi)參考(kao)sqlite3.h 文(wen)(wen)件。里面(mian)有詳(xiang)細定義(順便說(shuo)一下,sqlite3 的(de)(de)代碼(ma)注釋率自稱是(shi)(shi)非(fei)常(chang)高(gao)的(de)(de),實(shi)際上也的(de)(de)確很高(gao)。只要(yao)你會(hui)看英文(wen)(wen),sqlite 可以(yi)(yi)讓你學到不(bu)少東西)。

關閉(bi)數據庫鏈接sqlite3_close用(yong)法

原型:

int sqlite3_close(sqlite3 *ppDb)

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

執行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 */ )

這(zhe)就是執行(xing)一(yi)條(tiao)sql 語(yu)句(ju)的(de)函(han)數(shu)。第1個(ge)(ge)參(can)(can)數(shu)不再說了,是前面open函(han)數(shu)得到(dao)(dao)的(de)指(zhi)針(zhen)。說了是關鍵數(shu)據結構。第2個(ge)(ge)參(can)(can)數(shu)constchar*sql是一(yi)條(tiao)sql 語(yu)句(ju),以(yi)\0結尾。第3個(ge)(ge)參(can)(can)數(shu)sqlite3_callback 是回調(diao),當這(zhe)條(tiao)語(yu)句(ju)執行(xing)之(zhi)后,sqlite3會(hui)去調(diao)用(yong)你提供的(de)這(zhe)個(ge)(ge)函(han)數(shu)。第4個(ge)(ge)參(can)(can)數(shu)void*是你所提供的(de)指(zhi)針(zhen),你可以(yi)傳(chuan)遞任(ren)何一(yi)個(ge)(ge)指(zhi)針(zhen)參(can)(can)數(shu)到(dao)(dao)這(zhe)里,這(zhe)個(ge)(ge)參(can)(can)數(shu)最終會(hui)傳(chuan)到(dao)(dao)回調(diao)函(han)數(shu)里面,如果不需要傳(chuan)遞指(zhi)針(zhen)給回調(diao)函(han)數(shu),可以(yi)填NULL。等(deng)下我(wo)們再看(kan)回調(diao)函(han)數(shu)的(de)寫(xie)法,以(yi)及(ji)這(zhe)個(ge)(ge)參(can)(can)數(shu)的(de)使用(yong)。第5個(ge)(ge)參(can)(can)數(shu)char** errmsg 是錯(cuo)誤信息(xi)。注意是指(zhi)針(zhen)的(de)指(zhi)針(zhen)。sqlite3里面有(you)很多固定的(de)錯(cuo)誤信息(xi)。執行(xing)sqlite3_exec 之(zhi)后,執行(xing)失(shi)敗時可以(yi)查閱這(zhe)個(ge)(ge)指(zhi)針(zhen)(直接cout<

exec 的回調

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

//para是(shi)(shi)(shi)你(ni)(ni)在sqlite3_exec 里傳入的(de)(de)void*參數(shu)通過para參數(shu),你(ni)(ni)可以傳入一些特殊(shu)的(de)(de)指針(zhen)(比如類指針(zhen)、結構指針(zhen)),//然后(hou)(hou)在這(zhe)里面強制轉換(huan)成對應的(de)(de)類型(xing)(這(zhe)里面是(shi)(shi)(shi)void*類型(xing),必須強制轉換(huan)成你(ni)(ni)的(de)(de)類型(xing)才(cai)可用(yong))。然后(hou)(hou)操(cao)作這(zhe)些數(shu)據//n_column是(shi)(shi)(shi)這(zhe)一條記錄有(you)多少(shao)(shao)個(ge)(ge)字(zi)段(duan)(即這(zhe)條記錄有(you)多少(shao)(shao)列)//char** column_value 是(shi)(shi)(shi)個(ge)(ge)關鍵(jian)值(zhi),查出來的(de)(de)數(shu)據都保存在這(zhe)里,它(ta)實際(ji)上是(shi)(shi)(shi)個(ge)(ge)1維(wei)數(shu)組(不要以為(wei)是(shi)(shi)(shi)2維(wei)數(shu)組),//每一個(ge)(ge)元素(su)都是(shi)(shi)(shi)一個(ge)(ge)char*值(zhi),是(shi)(shi)(shi)一個(ge)(ge)字(zi)段(duan)內容(用(yong)字(zi)符串來表示(shi),以\0結尾)//char** column_name 跟column_value是(shi)(shi)(shi)對應的(de)(de),表示(shi)這(zhe)個(ge)(ge)字(zi)段(duan)的(de)(de)字(zi)段(duan)名稱

實例:

#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<<"打(da)開數(shu)據庫失敗:"<

上一篇:socket網絡編程基礎

下一篇:網絡編程實驗一-TCP通信

熱(re)點文(wen)章(zhang)推薦
華清(qing)學(xue)員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓(xun)洽(qia)談(tan)專線:010-82525379 院校(xiao)合作洽(qia)談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部