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;//返回值一定要写
}
相关推荐
川石课堂软件测试15 分钟前
MySQL数据库之DBA命令
数据库·网络协议·mysql·http·单元测试·prometheus·dba
谷歌开发者2 小时前
Web 开发指向标 | Chrome 开发者工具学习资源 (一)
前端·chrome·学习
ybb_ymm2 小时前
mysql8在linux下的默认规则修改
linux·运维·数据库·mysql
倔强的石头_3 小时前
Navicat Premium 与金仓数据库融合实践:高效管理国产数据库新方案
数据库
程序新视界3 小时前
为什么要尽量将MySQL表字段要设置为NOT NULL?
数据库·mysql·dba
怪兽20143 小时前
SQL优化手段有哪些
java·数据库·面试
本郡主是喵3 小时前
用 TypeScript 进行 Truffle 测试
学习·区块链
lypzcgf4 小时前
FastbuildAI后端数据库模块注册分析
数据库·ai应用·ai创业·智能体平台·ai应用平台·agent平台·fastbuildai
武文斌775 小时前
复习总结最终版:单片机
linux·单片机·嵌入式硬件·学习
xyy20255 小时前
Spring事务的传播方式
java·数据库·spring