VS2022引入sqlite数据库交互

法一:用官网编译好的动态库(推荐)

下载所需文件

sqlite官网地址:https://www.sqlite.org/howtocompile.html

下载以下的2个压缩包

第一个压缩包
  • sqlite-amalgamation-xxxx.zip,xxxx是版本号,保持一致即可,这里面有sqite3.h
第二个压缩包,以64位为例
  • sqlite-dll-win-x64-xxxx.zip,这里面有 sqlite3.dll 和 sqlite3.def(sqlite3.def将用来生成 sqlite3.lib )
  • 32位的同理下载x86的文件就行(本文是讲的64位)

都放到一个文件夹下

比如D:\sqlite

生成静态库

  1. 打开 VS2022命令行,一般在开始菜单就可以找到
  1. 使用cd命令进入存放sqlite3相关文件的文件夹
  1. 接着输入
bash 复制代码
lib /MACHINE:X64 /DEF:sqlite3.def

生成的 sqlite3.lib 将会出现在存放sqlite3相关文件的目录

法二:自行编译源码生成所需动态库和静态库

这个方法还需要安装TCL库,稍微麻烦一些。

TCL库配置

1)TCL库下载地址

  1. 地址:https://sqlite.org/tmp/tcl9.0.0.tar.gz
  2. 下载后解压:比如我放在E:\github\third_party\sqlite\tcl9.0.0

2)安装TCL库

  1. 找到VS2022的命令行工具,64位为例

2)切换目录到安装的tcl的win目录下

3)执行命令:nmake /f makefile.vc release

4)安装 TCL 到指定目录

sqlite配置

1)下载sqlite源代码

  1. 地址:https://www.sqlite.org/howtocompile.html

2)VS2022命令行操作

1.进入源代码目录

2.设置环境变量

bash 复制代码
set TCLDIR=C:\Tcl  

3.编译sqlite生成所需库

bash 复制代码
nmake /f makefile.msc
nmake /f makefile.msc sqlite3.c
nmake /f makefile.msc sqlite3.exe

3) 可以得到sqlite3.dll和sqlite3.lib

位于E:\github\third_party\sqlite\sqlite-src-3470200路径下

VS2022项目环境配置

上面的法一和法二选一种就行,更推荐法一。

vs2022中使用sqlite3数据库需要3个文件,sqite3.h、sqlite3.dll、sqlite3.lib

新建控制台项目,64位为例,用于测试


包含目录和库目录设置好路径

链接器输入

C++与sqlite交互测试代码

测试代码

bash 复制代码
//#include <sqlite3.h>
//#include <iostream>
//int main(int argc, char* argv[])
//{
//    sqlite3* db = nullptr;      // 数据库对象
//    char* zErrMsg = nullptr;    // 错误信息
//    int rc = 0;                 // 执行结果
//    rc = sqlite3_open("test.db", &db);
//    if (rc) {
//        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
//        exit(0);
//    }
//    else {
//        fprintf(stderr, "Opened database successfully\n");
//    }
//    sqlite3_close(db);
//    return 0;
//}


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

// 创建数据库连接
sqlite3* OpenDatabase(const char* dbFilePath) {
    sqlite3* db;

    // 打开数据库
    if (sqlite3_open(dbFilePath, &db) != SQLITE_OK) {
        std::cerr << "Error opening database." << std::endl;
        return nullptr;
    }

    return db;
}

// 关闭数据库连接
void CloseDatabase(sqlite3* db) {
    sqlite3_close(db);
}

// 创建表
void CreateTable(sqlite3* db) {
    const char* createTableSQL = "CREATE TABLE IF NOT EXISTS Users (Id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT, Age INTEGER);";

    if (sqlite3_exec(db, createTableSQL, nullptr, nullptr, nullptr) != SQLITE_OK) {
        std::cerr << "Error creating table." << std::endl;
    }
    else {
        std::cout << "Table created or already exists." << std::endl;
    }
}

// 插入数据
void InsertData(sqlite3* db, const char* name, int age) {
    const char* insertDataSQL = "INSERT INTO Users (Name, Age) VALUES (?, ?);";
    sqlite3_stmt* statement;

    if (sqlite3_prepare_v2(db, insertDataSQL, -1, &statement, nullptr) == SQLITE_OK) {
        // 绑定参数
        sqlite3_bind_text(statement, 1, name, -1, SQLITE_STATIC);
        sqlite3_bind_int(statement, 2, age);

        // 执行语句
        if (sqlite3_step(statement) != SQLITE_DONE) {
            std::cerr << "Error inserting data." << std::endl;
        }
        else {
            std::cout << "Data inserted." << std::endl;
        }

        // 释放资源
        sqlite3_finalize(statement);
    }
}

// 查询数据
void QueryData(sqlite3* db) {
    const char* queryDataSQL = "SELECT * FROM Users;";
    sqlite3_stmt* statement;

    if (sqlite3_prepare_v2(db, queryDataSQL, -1, &statement, nullptr) == SQLITE_OK) {
        std::cout << "Id\tName\tAge" << std::endl;

        // 遍历结果集
        while (sqlite3_step(statement) == SQLITE_ROW) {
            std::cout << sqlite3_column_int(statement, 0) << "\t"
                << sqlite3_column_text(statement, 1) << "\t"
                << sqlite3_column_int(statement, 2) << std::endl;
        }

        // 释放资源
        sqlite3_finalize(statement);
    }
}

// 更新数据
void UpdateData(sqlite3* db, int id, const char* name, int age) {
    const char* updateDataSQL = "UPDATE Users SET Name=?, Age=? WHERE Id=?;";
    sqlite3_stmt* statement;

    if (sqlite3_prepare_v2(db, updateDataSQL, -1, &statement, nullptr) == SQLITE_OK) {
        // 绑定参数
        sqlite3_bind_text(statement, 1, name, -1, SQLITE_STATIC);
        sqlite3_bind_int(statement, 2, age);
        sqlite3_bind_int(statement, 3, id);

        // 执行语句
        if (sqlite3_step(statement) != SQLITE_DONE) {
            std::cerr << "Error updating data." << std::endl;
        }
        else {
            std::cout << "Data updated." << std::endl;
        }

        // 释放资源
        sqlite3_finalize(statement);
    }
}

// 删除数据
void DeleteData(sqlite3* db, int id) {
    const char* deleteDataSQL = "DELETE FROM Users WHERE Id=?;";
    sqlite3_stmt* statement;

    if (sqlite3_prepare_v2(db, deleteDataSQL, -1, &statement, nullptr) == SQLITE_OK) {
        // 绑定参数
        sqlite3_bind_int(statement, 1, id);

        // 执行语句
        if (sqlite3_step(statement) != SQLITE_DONE) {
            std::cerr << "Error deleting data." << std::endl;
        }
        else {
            std::cout << "Data deleted." << std::endl;
        }

        // 释放资源
        sqlite3_finalize(statement);
    }
}

int main() {
    // 指定数据库文件路径
    const char* dbFilePath = "test.db";

    // 创建数据库连接
    sqlite3* db = OpenDatabase(dbFilePath);

    if (db) {
        // 创建表
        CreateTable(db);

        // 插入数据
        InsertData(db, "zhang san", 30);
        InsertData(db, "li si", 40);
        InsertData(db, "wang wu", 50);

        // 查询数据
        QueryData(db);

        // 更新数据
        //UpdateData(db, 1, "Updated Name", 35);

         查询更新后的数据
        //QueryData(db);

         删除数据
        //DeleteData(db, 1);

         查询删除后的数据
        //QueryData(db);

        // 关闭数据库连接
        CloseDatabase(db);
    }

    return 0;
}

生成文件

正常输出

sqlite的db文件的查看工具

sqliteexpert下载地址

地址:http://www.sqliteexpert.com

使用方法

安装后即可使用,将db文件直接拖进去即可

相关推荐
吾当每日三饮五升2 小时前
C++单例模式跨DLL调用问题梳理
开发语言·c++·单例模式
猫武士水星3 小时前
C++ scanf
开发语言·c++
捕鲸叉4 小时前
QT自定义工具条渐变背景颜色一例
开发语言·前端·c++·qt
想要入门的程序猿4 小时前
Qt菜单栏、工具栏、状态栏(右键)
开发语言·数据库·qt
键盘上的蚂蚁-4 小时前
Python 语言结合 Flask 框架来实现一个基础的代购商品管理
jvm·数据库·oracle
Rossy Yan4 小时前
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
c++·排序算法·面向对象·封装·查找
我搞slam5 小时前
全覆盖路径规划算法之BCD源码实现(The Boustrophedon Cellular Decomposition)
c++·算法·图搜索算法
Rossy Yan5 小时前
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
开发语言·数据结构·c++·算法·查找·头歌实践教学平台·合集
代码欢乐豆5 小时前
MongoDB的部署和操作
数据库·mongodb
<e^πi+1=0>5 小时前
使用Locust对MongoDB进行负载测试
数据库·mongodb