sqlite資料庫介面函式

2021-10-09 21:48:11 字數 4973 閱讀 3366

sqlite3 c/c++ 介面:

sqlite3 介面的核心元素

兩個物件

八大函式

兩個物件:

sqlite3 :the database connection object 資料庫連線物件

資料庫連線控制代碼/資料庫檔案描述符

sqlite3 代表著你所開啟的那個sqlite3的資料庫檔案,後序對這個資料庫檔案

進行操作都需要用到這個物件

sqlite3_stmt :the prepared statemet object sql語句物件

八大函式:

sqlite3_open :開啟或建立乙個sqlite3資料庫,返回乙個sqlite3資料庫連線物件

sqlite3_close :關閉乙個sqlite3資料庫

sqlite3_prepare_v2 :建立乙個sql語句物件

sqlite3_bind_* :給語句物件繫結引數的函式

sqlite3_step :執行sql語句物件

sqlite3_column :分析一行中的列

sqlite3_reset :用來復位sql語句物件,以便下一輪的引數繫結

sqlite3_finalize:銷毀乙個語句物件

sqlite3_exec:

sqlite3_prepare_v2

sqlite3_step

sqlite3_finalize

三個函式的合成

具體的api函式解析

(1)開啟乙個sqlite3資料庫

在sqlite3資料庫管理系統中,用結構體 sqlite3來表示乙個已經開啟的資料庫物件

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

filename:要開啟的資料庫的路徑名

ppdb:二級指標,用來儲存開啟的資料庫連線物件

返回值:

成功返回 sqlite_ok

失敗返回其他值

(2) 關閉乙個sqlite3資料庫

int sqlite3_close(sqlite3*ppdb);

ppdb:要關閉的資料庫連線物件

返回值:

成功返回 sqlite_ok

失敗返回其他值

(3)sql語句物件

用sqlite3_stmt結構體來描述乙個sql語句物件

我們的應用都是通過 sql語句物件 把 sql語句指令發給資料庫管理系統

sqlite3_prepare_v2 :建立乙個sql語句物件  

int sqlite3_prepare_v2(

sqlite3 *db, /* 資料庫連線物件,表示要操作哪個資料庫 */

const char *zsql, /* 要執行的sql語句,多條sql語句用 ; 隔開,可以包含變數名 */

int nbyte, /* 表示要編譯到哪個位置 */

< 0 :編譯到zsql指向的語句中第乙個\0為止

== 0 :什麼都不編譯

>0 : 只編譯 zsql指向的語句中的前n個位元組

sqlite3_stmt **ppstmt, /* *ppstmt 用來儲存編譯好的sql語句物件 */

const char **pztail /* 如果不為空 ,*pztail 指向的zsql中編譯的第一條完整的

sql語句的第乙個字元的位址*/

);

返回值:

成功返回 sqlite_ok

失敗返回其他值

zsql指向的sql語句:

(1)不帶引數

const char * sql = "create table t_stu\

(\num int primary key,\

name varchar(255) not null,\

age int\

);insert into t_stu(num,name,age) values (1001,'pxl',\

18);";

(2)帶引數

編譯的sql語句中可以包含 「變數/引數」,其值在執行期間可以改變,但是

sql語句物件不需要重新編譯,通過特定的採納數介面來指定這些sql變數的值

const char*sql = "insert into t_stu(num,name,age) values (變數名1,變數名2,變數名3));";

變數名按照以下方式來執行:

?num num 的範圍[1,max_num]

eg:const char*sql = "insert into t_stu(num,name,age) values (?1,?2,?3));";

:nmae name 就是你取的變數的名字

@name

$name

eg:const char*sql = "insert into t_stu(num,name,age) values (:a,:b,:c));";

(2.1)給sql語句物件中的引數賦值

1. 獲取引數的索引

因為所有的繫結引數的函式,都是通過索引去操作這些引數

sqlite3_bind_parameter_index :用來獲取某個變數在sql語句物件中的索引

int sqlite3_bind_parameter_index(sqlite3_stmt*stmt, const char *zname);

stmt:sql語句物件

zname:變數名

返回值:成功返回索引 (> 0)

假如沒有匹配到引數名 返回0

2. 繫結相應的值到變數/引數上面

int sqlite3_bind_double(sqlite3_stmt*, int, double);

int sqlite3_bind_int(sqlite3_stmt*, int, int);

int sqlite3_bind_null(sqlite3_stmt*, int);

int sqlite3_bind_text(sqlite3_stmt*stmt,int index,const char*str,int,void(*)(void*));

第乙個引數:sql語句物件

第二個引數: 要繫結的變數的索引

第三個引數: 要繫結的值

sqlite3_bind_int==》int

sqlite3_bind_double ==》double

sqlite3_bind_null ==>空

int sqlite3_bind_text(sqlite3_stmt*stmt,int index,const char*str,int len,void(*p)(void*));

str :要繫結的字串的位址

len :字串的長度

p : 函式指標,指向的函式用來釋放字串的空間

如果不需要釋放字串的空間 直接給 null

(4)sqlite3_step :執行sql語句物件

int sqlite3_step(sqlite3_stmt*pstmt);

pstmt : 指向要編譯好的並且要執行的sql語句物件

返回值:

sqlite_done :sql語句執行完成

sqlite_error :出錯啦

sqlite_busy :沒有拿到鎖,沒有執行語句

sqlite_misuse:使用方法不當

sqlite_row:返回一行

當sql語句時select時候,執行結果是乙個結果集,一行一行的返回。

呼叫一次sqlite3_step就可以獲取一行的結果,一直呼叫到結果為done

sqlite_row:返回一行,需要使用者自己呼叫解析函式去解析這一行的資料

//用來獲取一行中有多少列

int sqlite3_column_count(sqlite3_stmt *pstmt);

//用來獲取一行中第i列的資料型別

int sqlite3_column_type(sqlite3_stmt*pstmt, int icol);

pstmt:sql語句物件

icol :第幾列 ,從 0開始

返回值:

sqlite_integer 1

sqlite_float 2

sqlite_blob 4

sqlite_null 5

sqlite_text 3

// 獲取一行中第i列的值

const void *sqlite3_column_blob(sqlite3_stmt*, int icol);

double sqlite3_column_double(sqlite3_stmt*, int icol);

int sqlite3_column_int(sqlite3_stmt*, int icol);

sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int icol);

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int icol);

//獲取第i列的列名

const char *sqlite3_column_name(sqlite3_stmt*, int n);

(5) sqlite3_finalize:銷毀乙個語句物件

int sqlite3_finalize(sqlite3_stmt *pstmt);

pstmt:要銷毀的語句物件

(6) sqlite3_reset :重置sql語句物件,以便下一輪繫結引數

int sqlite3_reset(sqlite3_stmt *pstmt);

pstmt:要重置的語句物件

(7) sqlite3_errmsg :輸出資料庫中的出錯資訊

const charsqlite3_errmsg(sqlite3pdb);

資料庫 SQLite3常用函式

開啟資料庫 函式原型 int sqlite3 open const char filename,sqlite3 ppdb 函式功能 開啟乙個資料庫,若該資料庫檔案不存在,則自動建立。開啟或者建立資料庫的命令會被快取,直到這個資料庫真正被呼叫的時候才會被執行。輸入引數 filename,待開啟的資料庫...

SQLite資料庫掃盲

今天注意到 sqlite 3.6.11 上個月發布的 增加了乙個我期待已久的 online backup 介面,激動之餘就順便和大夥兒聊一下sqlite資料庫。本帖權當是sqlite掃盲,如果你對sqlite已經很熟悉,本文就不必再看了。技術上的優點和特性 sqlite是乙個輕量級 跨平台的關係型資...

瞎掰 Sqlite資料庫

為了方便專案的跨平台,在選用資料庫時選擇了輕量級的跨平台資料庫 sqlite 在使用過程中,將常用介面封裝了一下,使 相對簡潔,使用起來也相對方便。目前封裝了兩個介面 一 封裝了sqlite3 exec介面 int homedatabase callmysql sqlite3 sqlfd,const...