sqlite3介面函式(C/C++)
- 核心
- 一、兩個物件
- 1.資料庫連接物件
- 2.SQL陳述句物件
- 二、八個函式
- 1. sqlite3_open:打開或創建資料庫
- 2. sqlite3_close :關閉
- 3. sqlite3_prepare_v2 :創建SQL陳述句物件
- 4. sqlite3_bind_* :系結引數
- 5. sqlite3_step:執行
- 6. sqlite3_reset :復位
- 7. sqlite3_finalize :銷毀
- 8. sqlite3_exec :一步到位
核心
Sqlite3介面的核心元素:兩個物件 和 八個函式
一、兩個物件
1.資料庫連接物件
sqlite3 :the database connection object 資料庫連接物件,
資料庫的連接句柄/資料庫的檔案描述符,sqlite3 代表所打開的那個 sqlite3 的資料庫檔案,后序對該資料庫的操作都需要用到這個物件,
2.SQL陳述句物件
sqlite3_stmt :the prepared statment object SQL陳述句物件,
去操作關系型資料庫都是通過SQL陳述句來實作的
sqlite3_stmt這個結構體用來描述一個SQL陳述句物件,我們的應用都是用SQL陳述句物件去發送SQL指令給資料庫管理系統
二、八個函式
1. sqlite3_open:打開或創建資料庫
sqlite3_open:打開或創建一個sqlite3資料庫,回傳一個sqlite3的資料庫連接物件
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
filename:要打開的sqlite3的資料庫的路徑名
ppDb: 二級指標 ,用來保存打開的資料庫連接物件的
回傳值:
成功回傳SQLITE_OK(0),失敗回傳其他值
2. sqlite3_close :關閉
sqlite3_close:關閉一個sqlite3的資料庫連接物件
int sqlite3_close ( sqlite3* );
回傳值:
成功回傳SQLITE_OK(0),失敗回傳其他值
3. sqlite3_prepare_v2 :創建SQL陳述句物件
3.1、sqlite3_prepare_v2 :編譯SQL陳述句,并創建一個SQL陳述句物件
int sqlite3_prepare_v2(
sqlite3 *db, /* 資料庫連接物件,表示要操作哪個資料庫 */
const char *zSql, /*指向原始的SQL陳述句(要編譯的SQL陳述句,多條SQL陳述句用;隔開)可以包含變數名*/
int nByte, /* 指示要編譯SQL陳述句到哪個位置
<0 :編譯SQL陳述句到第一個\0結束
=0 :什么都不編譯
>0 :編譯SQL陳述句到前面n個位元組 */
sqlite3_stmt **ppStmt, /* ppStmt 用來保存編譯好的SQL陳述句物件 */
const char **pzTail /* 如果不為NULL,則pzTail指向的SQL陳述句中第一條完整SQL陳述句后面的一個字符 */
);
回傳值:
成功回傳SQLITE_OK(0)失敗回傳其他值
3.2、zSql指向的原始字串陳述句:
(1)不帶引數(變數)
"create table t_school(
id int primary key,
name text not null,
tel text,addr text);
insert into t_school values(1001,'gec','123456','changsha');"
(2)包括引數
編譯的SQL陳述句中可以包含“變數/引數”,其值可以在運行期間改變,但是SQL陳述句物件不需要重新編譯,通過特定的引數介面來制定這些SQL變數的值
char *sql = "insert into stu (id,name,score)values(變數名,變數名,變數名);";
有如下方式來指定變數名:
(1)?NNN
NNN 必須是一個 1 ~ SQLITE_MAX_NUM
: AAA 命名引數,引數名AAA,AAA就是你取的一個變數的名字
@ AAA 命名引數,引數名AAA,AAA就是你取的一個變數的名字
$ AAA 命名引數,引數名AAA,AAA就是你取的一個變數的名字
4. sqlite3_bind_* :系結引數
sqlite3_bind_* :給SQL陳述句物件系結引數 ==》 一系列的系結引數
4.1、給SQL陳述句物件的引數賦值
獲取引數的索引,因為所有的系結引數的函式,都是通過索引去指定引數
sqlite3_bind_parameter_index:用來獲取zName引數名在陳述句物件中的索引
int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName);
回傳值:
成功回傳索引值(>0),假如沒有匹配到引數名,回傳0
4.2、給引數賦值
int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
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*, int, const char*, int n, void(*)(void*));
這些系結函式的引數是:
第一個引數:SQL陳述句物件
第二個引數:要系結的變數在SQL陳述句中的索引
第三個引數:要系結的值
sqlite3_bind_text(sqlite3_stmt*, int, const char*str, int n, void(*p)(void*));
/* str:指定字串
n :字串的長度
p:函式指標
函式指標用來釋放字串的空間的
如果字串不需要釋放直接給NULL */
回傳值:
成功回傳SQLITE_OK(0),失敗回傳其他值
5. sqlite3_step:執行
sqlite3_step :執行編譯好的SQL陳述句物件
int sqlite3_step(sqlite3_stmt*ppStmt);
// ppStmt:指向要執行的SQL陳述句物件
回傳值:
SQLITE_BUSY :沒獲取到鎖,陳述句沒有執行
SQLITE_DONE :SQL陳述句執行完成
SQLITE_ERROR :出錯
SQLITE_MISUSE:使用方法不當
SQLITE_ROW: 當SQL陳述句為 select 時候,執行后,結果是一個表,它是一行一行回傳的,呼叫一次 sqlite3_step 就會回傳一行,SQLITE_ROW就表示有回傳結果,一直到回傳值 SQLITE_DONE
查詢結果:
select陳述句,他回傳的是一個結果集,需要用到額外的一些函式介面去獲取這些結果集中記錄
// 回傳select結果中有多少列
int sqlite3_column_count(sqlite3_stmt*ppStmt);
// 回傳select結果中第i列的資料型別
int sqlite3_column_type(sqlite3_stmt*ppStmt, int iCol);
/* 回傳值:
SQLITE_INTEGER:整型
SQLITE_FLOAT :浮點
SQLITE_TEXT :文本
SQLITE_BLOB :二進制
SQLITE_NULL :空型別 */
// 獲取結果集中當前行中的第i列的值
double sqlite3_column_double(sqlite3_stmt*, int iCol);
int sqlite3_column_int(sqlite3_stmt*, int iCol);
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
// 回傳結果集中第i列的名字
const char *sqlite3_column_name(sqlite3_stmt*, int iCol);
6. sqlite3_reset :復位
sqlite3_reset:用來復位SQL陳述句物件,以便下一輪的引數的系結
7. sqlite3_finalize :銷毀
sqlite3_finalize:用來銷毀一個SQL陳述句物件
int sqlite3_finalize(sqlite3_stmt*ppStmt);
8. sqlite3_exec :一步到位
sqlite3_exec :一步到位,其實是這三個函式的組合:
sqlite3_prepare_v2 :創建一個SQL陳述句物件
sqlite3_step :執行SQL陳述句物件
sqlite3_finalize :用來銷毀一個SQL陳述句物件
int sqlite3_exec(
sqlite3*, /* 指向資料庫連接物件 */
const char *sql, /* 要執行的SQL陳述句,不帶引數
可以執行多條SQL陳述句,以;分開*/
int (*callback)(void*,int,char**,char**), /* 回呼函式 */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
第三個引數:回呼函式
一般在SQL陳述句為 select 陳述句時,需要回呼,因為select陳述句需要回傳結果,select 每查詢一條陳述句的時候,就會呼叫一次該回呼函式,
int callback(void*arg,int n,char*column_value[],char*column_names[]);
/* arg:用戶指定
n :結果行中有多少列
column_value:每一列的值(所有的值都是char* 字串)
column_names:每一列的列名 */
回傳值:
成功回傳0,失敗回傳其他值,回呼函式執行失敗(回傳非0),sqlite3_exec 就不會繼續往下執行
只有SQL陳述句為 select 陳述句才會使用回呼函式,其他陳述句時,可以NULL
.
關注博主不迷路,博主帶你上高速!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/210880.html
標籤:其他
