【sqlite3学习二】C语言操作

这篇主要是sqlit3的库函数使用,sql语句在上篇中,但是c的sql语句是可以使用占位符的,占位符为“?”,使用方法例如:

sql = "insert into mytable (id, name, age, phone,address) values(?,?,?,?,?);"

下载

下载地址:https://www.sqlite.org/download.html
下载源码后解压,解压后的文件夹中有四个文件,编写C程序需要使用到的文件是sqlite3.csqilte3.h,将这两个文件复制到项目目录下。

打开关闭数据库

首先要有一个数据库链接句柄,类型为sqlite3

sqlite3 *db;
sqlite3_open(path, &db); 	//打开数据库
sqlite3_close(db);	//关闭数据库

path为数据库表路径
sqlite3_open()打开数据库表,表不存在则创建

执行sql语句

执行sql语句有两种形式,一种是sqlite3_exec(),一个是sqlite3_prepare_v2,第二个还要结合其他语句一起使用。一般只执行一次的sql语句使用sqlite3_exec(),需要多次执行的使用sqlite3_prepare_v2,可以提高速率,例如插入和读取数据库数据。sqlite3_exec()是sqlite3_prepare_v2和其他语句的一个封装。

sqlite3_exec()

函数原型

int sqlite3_exec(
  sqlite3 *db,                /* The database on which the SQL executes */
  const char *zSql,           /* The SQL to be executed */
  sqlite3_callback xCallback, /* Invoke this callback routine */
  void *pArg,                 /* First argument to xCallback() */
  char **pzErrMsg             /* Write error messages here */
)

参数解析
db:数据库句柄
zSql:执行的SQL语句
xCallback:回调函数
pArg:回调函数参数
pzErrMsg:错误信息

sqlite3_prepare_v2()

插入数据

1、准备sql语句
函数原型

int sqlite3_prepare_v2(
  sqlite3 *db,            /* Database handle */
  const char *zSql,       /* SQL statement, UTF-8 encoded */
  int nByte,              /* Maximum length of zSql in bytes. */
  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
  const char **pzTail     /* OUT: Pointer to unused portion of zSql */
);

函数参数
db:数据库句柄
zSql:sql语句
nByte:如果nByte小于0,则函数取出zSql中从开始到第一个0终止符的内容;如果nByte不是负的,那么它就是这个函数能从zSql中读取的字节数的最大值。
ppStmt:能够使用sqlite3_step()执行的编译好的准备语句的指针,如果错误发生,它被置为NULL
pzTail:上面提到zSql在遇见终止符或者是达到设定的nByte之后结束,假如zSql还有剩余的内容,那么这些剩余的内容被存放到pZTail中,不包括终止符

2、绑定数据
函数原型
绑定数据为一系列函数,该系列函数为sqlite3_bind_xx()

int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n,void(*)(void*));
int sqlite3_bind_int(sqlite3_stmt*, int, int);
int sqlite3_bind_double(sqlite3_stmt*, int, double);

函数参数
第一个参数:上一个函数中的stmt
第二个参数:序号,从1开始,代表第几列
第三个参数:绑定的值
第四个参数:第四个参数为字符串长度,-1表示全部
第五个参数:函数指针,一般为SQLITE_STATIC(表示字符串为常量)或SQLITE_TRANSIENT(对字符串拷贝)。
SQLITE3执行完操作后回调此函数,通常用于释放字符串占用的内存。
3、执行sql语句
函数原型

sqlite3_step(stmt)

4、清空内存

 sqlite3_reset(stmt);
 sqlite3_finalize(stmt);

5、整体步骤

1 准备SQL语句
2 绑定数据
3 执行
4 释放内存

读取数据

读取数据与插入数据差不多,只不过读取数据使用的是sqlite3_column_xx系列函数,该系列函数是从执行完sqlite3_step的结果的当前行中读取一列值(即某一行的某一列值)
使用方式

ret = sqlite3_column_int(sqlite3_stmt*, int);
ret = sqlite3_column_text(sqlite3_stmt*, int);

第一个参数:stmt
第二个参数:哪列,索引从0开始
返回值:ret为读到的值,ret类型与函数有关
5、整体步骤

1 准备SQL语句
2 执行	(这里与读取步骤有差别)
3 绑定数据
4 释放内存

github项目

https://github.com/Wangmenghahaha/learning/tree/master/sqlite3_test

参考链接

  1. https://blog.csdn.net/whahu1989/article/details/116326235
  2. https://zetcode.com/db/sqlitec/
  3. https://blog.csdn.net/qingzhuyuxian/article/details/79959326
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值