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,
sqlite3 **ppDb
);
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,
int nByte,
sqlite3_stmt **ppStmt,
const char **pzTail
);
返回值:
成功返回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*));
返回值:
成功返回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);
// 获取结果集中当前行中的第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,
int (*callback)(void*,int,char**,char**),
void *,
char **errmsg
);
第三个参数:回调函数
一般在SQL语句为 select 语句时,需要回调,因为select语句需要返回结果。select 每查询一条语句的时候,就会调用一次该回调函数。
int callback(void*arg,int n,char*column_value[],char*column_names[]);
返回值:
成功返回0,失败返回其他值,回调函数执行失败(返回非0),sqlite3_exec 就不会继续往下执行
只有SQL语句为 select 语句才会使用回调函数,其他语句时,可以NULL
.
关注博主不迷路,博主带你上高速!