c学习:sqlite3数据库操作

目录

获取sqlite3源码

c调用步骤

常用接口函数说明

[例子 打开数据库,新建表,插入数据,查询数据,关闭数据库](#例子 打开数据库,新建表,插入数据,查询数据,关闭数据库)

查询数据需要在回调函数中获取


获取sqlite3源码

先下载c的sqlite3源码,https://www.sqlite.org/index.html

解压后将sqlite3.c和sqlite3.h放到自己的项目里

查看数据库文件

可以用sqliteexpert打开查看,下载请看

SQLite administration | SQLite Experthttps://www.sqliteexpert.com/download.html

c调用步骤

  1. 添加头文件
  2. 打开数据库文件,如果数据库文件不存在,则创建
  3. 创建表
  4. 增删改查
  5. 关闭数据库文件

常用接口函数说明

SQLite -- C/C++ | 菜鸟教程 (runoob.com)https://www.runoob.com/sqlite/sqlite-c-cpp.html

  • sqlite3_open(const char *filename, sqlite3 **ppDb)
    • 函数作用:打开数据库文件,如果该数据库文件不存在则创建
    • filename:你要打开的那个的数据库文件的路径名
    • ppDb:数据库的文件句柄(类似之前所学的文件描述符)
    • 返回值,成功返回0,否则非0
  • sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
    • 函数作用:执行sql语句
    • sqlite3:数据库文件句柄
    • sql:sql语句
    • sqlite_callback:回调函数指针,将查询的结果存储到这里
    • data:传入回调函数中得数据
    • errmsg:错误原因
    • 返回值,成功返回SQLITE_OK,否则非SQLITE_OK
  • sqlite3_close(sqlite3*)
    • 函数作用:关闭数据库文件
  • int (*callback)(void*arg,int,char**,char**)
    • arg:是sqlite3_exec第四个参数传进来得值
    • int:数据库得列数,也就是多少列
    • char**:每一行的信息,char data[2][256]
    • char**:表示每列的标题名

例子 打开数据库,新建表,插入数据,查询数据,关闭数据库

复制代码
    //创建一个sqlite3空的句柄指针
    sqlite3 *ppDb = NULL;//数据库文件的句柄
    //打开数据库文件
    int ret = sqlite3_open("test.db",&ppDb);
    if(ret == 0)
    {
        printf("open success\n");
    }
    else{
        printf("open error:%s\n",sqlite3_errmsg(ppDb));
        return ;
    }
    
    //创建表
    const char *sql = "create table  if not exists staff(name text,age int);";    
    char *errmsg;//错误信息
    //执行
    ret = sqlite3_exec(ppDb,sql,NULL,NULL,&errmsg);
    if(ret != SQLITE_OK)
    {
        printf("create table error:%s\n",errmsg);
    }

    //插入数据
    //准备sql语句
    const char *insertSql = "insert into staff values('zhang3',22);";
    //执行
    ret = sqlite3_exec(ppDb,insertSql,NULL,NULL,&errmsg);
    if(ret != SQLITE_OK)
    {
        printf("insert error:%s\n",errmsg);
    }

    //查询
    //准备sql语句
    const char*selectSql = "select * from staff;";
    //执行
    ret = sqlite3_exec(ppDb,selectSql,callback,NULL,&errmsg);
    if(ret != SQLITE_OK)
    {
        printf("select error:%s\n",errmsg);
    }
    

    //关闭数据库文件
    sqlite3_close(ppDb);

查询数据需要在回调函数中获取

复制代码
查询到一行数据调用一次
int callback(void*arg,int column,char**data,char**feild)
{
    //name:zhang3  age:22
    //c++  qt
    qDebug()<<feild[0]<<":"<<data[0] <<"   "<<feild[1]<<":"<<data[1];
    //c
    printf("%s:%s %s:%s\n", feild[0], data[0], feild[1], data[1]);
    return 0;//返回值一定要写
}
相关推荐
虾球xz19 分钟前
游戏引擎学习第276天:调整身体动画
c++·学习·游戏引擎
虾球xz20 分钟前
游戏引擎学习第275天:将旋转和剪切传递给渲染器
c++·学习·游戏引擎
张哈大24 分钟前
【 Redis | 实战篇 秒杀实现 】
数据库·redis·缓存
weixin_4723394627 分钟前
Postgresql与openguass对比
数据库·postgresql
qq_386322691 小时前
华为网路设备学习-21 IGP路由专题-路由过滤(filter-policy)
前端·网络·学习
J先生x1 小时前
【IP101】图像处理进阶:从直方图均衡化到伽马变换,全面掌握图像增强技术
图像处理·人工智能·学习·算法·计算机视觉
惊起白鸽4505 小时前
MySQL全量,增量备份与恢复
数据库·mysql
虾球xz5 小时前
游戏引擎学习第268天:合并调试链表与分组
c++·学习·链表·游戏引擎
Y3174296 小时前
Python Day23 学习
python·学习
暮雨疏桐6 小时前
MySQL SQL Mode及其说明
数据库·sql·mysql·sql mode