VS2022引入sqlite数据库交互_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
生成静态库
- 打开 VS2022命令行,一般在开始菜单就可以找到
- 使用cd命令进入存放sqlite3相关文件的文件夹
- 接着输入
lib /MACHINE:X64 /DEF:sqlite3.def
生成的 sqlite3.lib 将会出现在存放sqlite3相关文件的目录
法二:自行编译源码生成所需动态库和静态库
这个方法还需要安装TCL库,稍微麻烦一些。
TCL库配置
1)TCL库下载地址
- 地址:https://sqlite.org/tmp/tcl9.0.0.tar.gz
- 下载后解压:比如我放在E:\\github\\third_party\\sqlite\\tcl9.0.0
2)安装TCL库
- 找到VS2022的命令行工具,64位为例
2)切换目录到安装的tcl的win目录下
3)执行命令:nmake /f makefile.vc release
4)安装 TCL 到指定目录
sqlite配置
1)下载sqlite源代码
- 地址:https://www.sqlite.org/howtocompile.html
2)VS2022命令行操作
1.进入源代码目录
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位为例,用于测试
包含目录和库目录设置好路径
链接器输入
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;}
生成文件
正常输出
sqlite的db文件的查看工具
sqliteexpert下载地址
地址:http://www.sqliteexpert.com
使用方法
安装后即可使用,将db文件直接拖进去即可