当前位置: 首页 > article >正文

Windows下C++使用SQLite

1、安装

  进入SQLite Download Page页面,下载sqlite-dll-win-x86-*.zip、sqlite-amalgamation-*.zip、sqlite-tools-win-x64-*.zip三个包,这三个包里分别包含dll文件和def文件、头文件、exe工具。

  使用vs命令行工具生成.lib文件:进入dll和def文件所在的目录,执行lib /DEF:sqlite3.def /OUT:sqlite3.lib /MACHINE:x86后获得.lib文件,这样就可以通过dll文件、lib文件、头文件来开发SQLite了。

  exe工具可以进行SQLite操作,比如下面为创建数据库和表(输入.quit结束命令,SQL语句以分号结尾):

2、代码示例

#include <iostream>
#include "sqlite3.h"

//SQL语句查询结果回调,比如对于select来说,查询到的每一条数据都会执行callback方法一次
static int callback(void* data/*sqlite3_exec()的第四个参数*/, int argc/*结果的列个数*/, 
    char** argv/*结果字段值*/, char** azColName/*结果列名*/) {
    for (int i = 0; i < argc; i++) {
        printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
    }
    printf("\n");

    return 0;
}


int main()
{
    sqlite3* pDB = nullptr;
    char* zErrMsg = nullptr;
    const char* sql = nullptr;
    const char* data = "Callback function called";
    //打开数据库,不存在则创建
    int nRes = sqlite3_open("D:\\sqlite\\test.db", &pDB);
    if (nRes) {
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(pDB));
        exit(0);
    }

    //创建表,已存在则创建失败
    sql = "create table company("\
            "id integer primary key autoincrement,"\
            "name text not null,"\
            "age integer not null);";
    nRes = sqlite3_exec(pDB, sql, 0, 0, &zErrMsg);
    if (nRes != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    }

    //插入数据
   sql = "insert into company (id,name,age) values(1, 'Paul', 32); " \
        "insert into company (id,name,age) values (2, 'Allen', 25); " \
        "insert into company (id,name,age) values (3, 'Teddy', 23);";
    nRes = sqlite3_exec(pDB, sql, 0, 0, &zErrMsg);
    if (nRes != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    }

    //查询数据
    sql = "select * from company";
    nRes = sqlite3_exec(pDB, sql, callback, (void*)data, &zErrMsg);
    if (nRes != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    }

    printf("==============================================\r\n");

    //修改数据
    sql = "update company set age = 25 where id=1; select * from company";
    nRes = sqlite3_exec(pDB, sql, callback, (void*)data, &zErrMsg);
    if (nRes != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    }

    printf("==============================================\r\n");

    //删除数据
    sql = "delete from company where id=3; select * from company";
    nRes = sqlite3_exec(pDB, sql, callback, (void*)data, &zErrMsg);
    if (nRes != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    }

    sqlite3_close(pDB);
}

  


http://www.kler.cn/a/458016.html

相关文章:

  • 【Rust自学】8.4. String类型 Pt.2:字节、标量值、字形簇以及字符串的各类操作
  • ORA-01187 it failed verification tests 增加tempfile
  • 【Rust自学】9.2. Result枚举与可恢复的错误 Pt.1:match、expect和unwrap处理错误
  • 【OceanBase】使用 Superset 连接 OceanBase 数据库并进行数据可视化分析
  • 使用maven-mvnd替换maven大大提升编译打包速度
  • 为什么需要设置 `NCCL_P2P_DISABLE=1` 和 `NCCL_IB_DISABLE=1`?
  • 手机联系人 查询 添加操作
  • 【VulnOSv2靶场渗透】
  • Vue.js组件开发-使用Paho MQTT数据传输
  • 德州仪器 cookie _px3 分析
  • BOOST 库在信号处理领域的具体应用及发展前景
  • 基于Springboot的社区老人健康信息管理系统的设计与实现​
  • 如果你的网站是h5网站,如何将h5网站变成小程序-除开完整重做方法如何快速h5转小程序-h5网站转小程序的办法-优雅草央千澈
  • 脱离电路图编程
  • 2413. 最小偶倍数
  • V-Express - 一款针对人像视频生成的开源软件
  • Mac OS
  • 3.基于 Temporal 的 Couchbase 动态 SQL 执行场景
  • 12.25 VScode+jupyter使用
  • Redis数据结构和内部编码以及单线程架构
  • 8086汇编(16位汇编)学习笔记05.asm基础语法和串操作
  • King3399(ubuntu文件系统)Qt环境搭建
  • 基于Python walch算法的音频数据频谱分析实例解析
  • Go函数中为什么会发⽣内存泄露
  • 单片机库函数-io输出操作
  • PostgreSQL synchronous_commit 参数