> 技术文档 > VS2022引入sqlite数据库交互_vs2022 sqlite

VS2022引入sqlite数据库交互_vs2022 sqlite


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

下载所需文件

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

下载以下的2个压缩包

第一个压缩包
  • sqlite-amalgamation-xxxx.zip,xxxx是版本号,保持一致即可,这里面有sqite3.h

VS2022引入sqlite数据库交互_vs2022 sqlite

VS2022引入sqlite数据库交互_vs2022 sqlite

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

VS2022引入sqlite数据库交互_vs2022 sqlite

VS2022引入sqlite数据库交互_vs2022 sqlite

都放到一个文件夹下

比如D:\\sqlite

VS2022引入sqlite数据库交互_vs2022 sqlite

生成静态库

  1. 打开 VS2022命令行,一般在开始菜单就可以找到

VS2022引入sqlite数据库交互_vs2022 sqlite

  1. 使用cd命令进入存放sqlite3相关文件的文件夹

VS2022引入sqlite数据库交互_vs2022 sqlite

  1. 接着输入
lib /MACHINE:X64 /DEF:sqlite3.def

VS2022引入sqlite数据库交互_vs2022 sqlite

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

VS2022引入sqlite数据库交互_vs2022 sqlite

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

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

TCL库配置

1)TCL库下载地址

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

VS2022引入sqlite数据库交互_vs2022 sqlite

2)安装TCL库

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

VS2022引入sqlite数据库交互_vs2022 sqlite

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

VS2022引入sqlite数据库交互_vs2022 sqlite

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

VS2022引入sqlite数据库交互_vs2022 sqlite

4)安装 TCL 到指定目录

VS2022引入sqlite数据库交互_vs2022 sqlite

sqlite配置

1)下载sqlite源代码

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

VS2022引入sqlite数据库交互_vs2022 sqlite

2)VS2022命令行操作

1.进入源代码目录

VS2022引入sqlite数据库交互_vs2022 sqlite

2.设置环境变量

set TCLDIR=C:\\Tcl 

3.编译sqlite生成所需库

nmake /f makefile.mscnmake /f makefile.msc sqlite3.cnmake /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位为例,用于测试

VS2022引入sqlite数据库交互_vs2022 sqlite

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

VS2022引入sqlite数据库交互_vs2022 sqlite

链接器输入

VS2022引入sqlite数据库交互_vs2022 sqlite

C++与sqlite交互测试代码

测试代码

//#include //#include //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 #include // 创建数据库连接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;}

生成文件

VS2022引入sqlite数据库交互_vs2022 sqlite

正常输出

VS2022引入sqlite数据库交互_vs2022 sqlite

sqlite的db文件的查看工具

sqliteexpert下载地址

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

VS2022引入sqlite数据库交互_vs2022 sqlite

使用方法

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

VS2022引入sqlite数据库交互_vs2022 sqlite