SQLite for C++: 完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 SQLite,为什么在 C++ 中需要它?

\n\n

SQLite 是一个轻量级、可嵌入的关系型数据库,不需要单独的服务器进程。与 MySQL 或 PostgreSQL 不同,SQLite 直接与磁盘上的数据库文件交互,这使其成为桌面应用程序、移动设备、嵌入式系统和小型 Web 项目的理想选择。

\n\n

对于 C++ 语言,有几种使用 SQLite 的方法。最流行且最稳定的是使用官方库 sqlite3(C API),它以一组 C 函数的形式提供。然而,为了在 C++ 中更方便地使用,经常使用封装库,例如 SQLiteCpp 或 sqlite_modern_cpp。在本文中,我们将重点介绍直接使用 C API(sqlite3 库),因为这能提供最大的控制力和对过程的理解。

\n\n

SQLite 的主要优势:

\n
    \n
  • 零配置:无需安装和配置服务器。
  • \n
  • 可移植性:数据库就是一个文件。
  • \n
  • 可靠性:支持事务(ACID)。
  • \n
  • 速度:对于大多数操作,比客户端-服务器数据库更快。
  • \n
  • 体积:库大小不到 600 KB。
  • \n
\n\n

为 C++ 安装 SQLite

\n\n

安装取决于您的操作系统和编译器。我们将介绍三种主要方法。

\n\n

1. 通过包管理器安装(Linux/macOS)

\n\n

Ubuntu/Debian:

\n
sudo apt-get update\nsudo apt-get install libsqlite3-dev
\n\n

macOS(Homebrew):

\n
brew install sqlite3
\n\n

Fedora:

\n
sudo dnf install sqlite-devel
\n\n

2. 在 Windows 上安装(vcpkg)

\n\n

如果您使用 vcpkg:

\n
vcpkg install sqlite3:x64-windows\nvcpkg integrate install
\n\n

之后,您可以在 Visual Studio 中包含 #include <sqlite3.h>。

\n\n

3. 从源代码编译(通用方法)

\n\n

从官方网站 sqlite.org 下载 sqlite3.c 和 sqlite3.h 文件。然后只需将它们添加到您的项目中:

\n
g++ main.cpp sqlite3.c -o myapp -lpthread -ldl
\n\n

在 Windows 上,可能需要额外指定 -lws2_32。

\n\n

快速入门:第一个使用 SQLite 的 C++ 程序

\n\n

让我们创建一个简单的控制台应用程序,用于打开数据库、创建表并插入一条记录。

\n\n
#include <iostream>\n#include <sqlite3.h>\n\nint main() {\n    sqlite3 *db;\n    char *errMsg = 0;\n\n    // 1. 打开(或创建)数据库\n    int rc = sqlite3_open("test.db", &db);\n    if (rc) {\n        std::cerr << "打开数据库错误: " << sqlite3_errmsg(db) << std::endl;\n        return 1;\n    }\n\n    // 2. 创建表\n    const char *sqlCreate = "CREATE TABLE IF NOT EXISTS users ("\n                            "id INTEGER PRIMARY KEY AUTOINCREMENT, "\n                            "name TEXT NOT NULL, "\n                            "age INTEGER);";\n\n    rc = sqlite3_exec(db, sqlCreate, 0, 0, &errMsg);\n    if (rc != SQLITE_OK) {\n        std::cerr << "SQL 错误: " << errMsg << std::endl;\n        sqlite3_free(errMsg);\n        sqlite3_close(db);\n        return 1;\n    }\n\n    // 3. 插入数据\n    const char *sqlInsert = "INSERT INTO users (name, age) VALUES ('Alice', 30);";\n    rc = sqlite3_exec(db, sqlInsert, 0, 0, &errMsg);\n    if (rc != SQLITE_OK) {\n        std::cerr << "插入错误: " << errMsg << std::endl;\n        sqlite3_free(errMsg);\n    } else {\n        std::cout                    

推荐