sqlite3接口函数(C/C++)

2 篇文章 0 订阅
2 篇文章 0 订阅

核心

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

.

关注博主不迷路,博主带你上高速!

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值