在C++项目中使用SQLite3数据库的全过程

 更新时间:2025年11月03日 09:35:54   作者:Humbunklung  
本文档介绍如何在 C++ 项目中使用 SQLite3 数据库,假设通过 vcpkg 安装了 SQLite3,因本机为Windows环境,为方便,用了本机的Visual Studio 2022 创建cmake项目,需要的朋友可以参考下

安装 SQLite3

首先,确保你已经通过 vcpkg 安装了 SQLite3。可以使用以下命令进行安装:

vcpkg install sqlite3

配置 CMakes

在 CMakeLists.txt 文件中,添加以下内容以找到并链接 SQLite3:

find_package(SQLite3 REQUIRED)

target_link_libraries(your_target PRIVATE SQLite::SQLite3)

实际上,由于我用了Visual Studio 2022,我的cmake项目结构如下:

use-sqlite3目录下的CMakeLists.txt文件我修改如下:

# CMakeList.txt: use-sqlite3 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
SET(CMAKE_TOOLCHAIN_FILE "D:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake")
include("D:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake")
if(DEFINED ENV{VCPKG_DEFAULT_TRIPLET} AND NOT DEFINED VCPKG_TARGET_TRIPLET)
    set(VCPKG_TARGET_TRIPLET "$ENV{VCPKG_DEFAULT_TRIPLET}" CACHE STRING "" FORCE)
endif()
# 将源代码添加到此项目的可执行文件。
add_executable (use-sqlite3 "use-sqlite3.cpp" "use-sqlite3.h")

if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET use-sqlite3 PROPERTY CXX_STANDARD 20)
endif()

# TODO: 如有需要,请添加测试并安装目标。

find_package(SQLite3 REQUIRED)

target_link_libraries(use-sqlite3 PRIVATE SQLite::SQLite3)

使用 SQLite3

在你的 C++ 代码中,可以包含 SQLite3 的头文件并开始使用它:

// 示例代码

// use-sqlite3.cpp: 定义应用程序的入口点。
//

#include "use-sqlite3.h"
#include "sqlite3.h"

using namespace std;

int main()
{
	sqlite3* db;
	char* zErrMsg = 0;
	int rc;

	// 打开数据库
	rc = sqlite3_open("example.db", &db);
	if (rc) {
		std::cerr << "Can't open database: " << sqlite3_errmsg(db) << std::endl;
		return(0);
	}
	else {
		std::cout << "Opened database successfully" << std::endl;
	}

	// 创建表
	const char* sqlCreateTable = "CREATE TABLE IF NOT EXISTS test( "
		"id INTEGER PRIMARY KEY, "
		"name TEXT NOT NULL);";
	rc = sqlite3_exec(db, sqlCreateTable, 0, 0, &zErrMsg);
	if (rc != SQLITE_OK) {
		std::cerr << "SQL error: " << zErrMsg << std::endl;
		sqlite3_free(zErrMsg);
	}
	else {
		std::cout << "Table created successfully" << std::endl;
	}

	// 插入数据
	const char* sqlInsert = "INSERT INTO test(name) VALUES ('Alice');";
	rc = sqlite3_exec(db, sqlInsert, 0, 0, &zErrMsg);
	if (rc != SQLITE_OK) {
		std::cerr << "SQL error: " << zErrMsg << std::endl;
		sqlite3_free(zErrMsg);
	}
	else {
		std::cout << "Records created successfully" << std::endl;
	}

	const char* sqlUpdate = "UPDATE test SET name = 'Bob' WHERE id = 2;";
	rc = sqlite3_exec(db, sqlUpdate, 0, 0, &zErrMsg);
	if (rc != SQLITE_OK) {
		std::cerr << "SQL error: " << zErrMsg << std::endl;
		sqlite3_free(zErrMsg);
	}
	else {
		std::cout << "Record updated successfully" << std::endl;
	}

	// 查询数据
	const char* sqlSelect = "SELECT * FROM test;";
	rc = sqlite3_exec(db, sqlSelect, [](void* NotUsed, int argc, char** argv, char** azColName) {
		for (int i = 0; i < argc; i++) {
			std::cout << azColName[i] << " = " << (argv[i] ? argv[i] : "NULL") << std::endl;
		}
		std::cout << std::endl;
		return 0;
		}, 0, &zErrMsg);
	if (rc != SQLITE_OK) {
		std::cerr << "SQL error: " << zErrMsg << std::endl;
		sqlite3_free(zErrMsg);
	}
	else {
		std::cout << "Operation done successfully" << std::endl;
	}

	// 关闭数据库
	sqlite3_close(db);
	std::cout << "Database closed successfully" << std::endl;

	return 0;
}

运行效果如下:

到此这篇关于在C++项目中使用SQLite3数据库的全过程的文章就介绍到这了,更多相关C++使用SQLite3数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现冒泡排序算法

    C语言实现冒泡排序算法

    冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
    2015-03-03
  • OpenCV 图像金字塔的实现示例

    OpenCV 图像金字塔的实现示例

    本文将结合实例代码,介绍OpenCV 图像金字塔,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-06-06
  • C/C++中static,const,inline三种关键字详细总结

    C/C++中static,const,inline三种关键字详细总结

    以下是对C/C++中static,const,inline的三种关键字进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • C++遍历文件夹目录的方法

    C++遍历文件夹目录的方法

    这篇文章主要介绍了C++遍历文件夹目录的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • C++ 使用getline()从文件中读取一行字符串方法示例

    C++ 使用getline()从文件中读取一行字符串方法示例

    这篇文章主要介绍了C++ 使用getline()从文件中读取一行字符串方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • C语言内存泄漏常见情况及解决方案详解

    C语言内存泄漏常见情况及解决方案详解

    这篇文章主要为大家介绍了C语言内存泄漏常见情况及解决方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • C++实现编写二维码的示例代码

    C++实现编写二维码的示例代码

    这篇文章主要为大家详细介绍如何基于C++实现编写二维码的功能,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-06-06
  • C++整数拼接技巧大揭秘

    C++整数拼接技巧大揭秘

    C++整数拼接技巧大揭秘,让你的代码更简洁高效!你是否还在为如何优雅地将整数拼接成字符串而烦恼?本指南将为你揭示C++中最实用、最酷炫的整数拼接技巧,助你提升编程技能,需要的朋友可以参考下
    2024-03-03
  • C++之openFrameworks框架介绍

    C++之openFrameworks框架介绍

    本章我们将介绍一个非常好用的跨平台的 C++开源框架 openFrameworks。它是一个开源的跨平台的C++工具包,方便开发者创建出一个更简单和直观的框架,擅长开发图像和动画,感兴趣的同学可以参考一下
    2023-05-05
  • C++的智能指针你真的了解吗

    C++的智能指针你真的了解吗

    这篇文章主要为大家详细介绍了C++的智能指针,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03

最新评论