什么是 SQLite,为什么在 C++ 中需要它?
\n\nSQLite 是一个轻量级、可嵌入的关系型数据库,不需要单独的服务器进程。与 MySQL 或 PostgreSQL 不同,SQLite 直接与磁盘上的数据库文件交互,这使其成为桌面应用程序、移动设备、嵌入式系统和小型 Web 项目的理想选择。
\n\n对于 C++ 语言,有几种使用 SQLite 的方法。最流行且最稳定的是使用官方库 sqlite3(C API),它以一组 C 函数的形式提供。然而,为了在 C++ 中更方便地使用,经常使用封装库,例如 SQLiteCpp 或 sqlite_modern_cpp。在本文中,我们将重点介绍直接使用 C API(sqlite3 库),因为这能提供最大的控制力和对过程的理解。
\n\nSQLite 的主要优势:
\n- \n
- 零配置:无需安装和配置服务器。 \n
- 可移植性:数据库就是一个文件。 \n
- 可靠性:支持事务(ACID)。 \n
- 速度:对于大多数操作,比客户端-服务器数据库更快。 \n
- 体积:库大小不到 600 KB。 \n
为 C++ 安装 SQLite
\n\n安装取决于您的操作系统和编译器。我们将介绍三种主要方法。
\n\n1. 通过包管理器安装(Linux/macOS)
\n\nUbuntu/Debian:
\nsudo apt-get update\nsudo apt-get install libsqlite3-dev\n\nmacOS(Homebrew):
\nbrew install sqlite3\n\nFedora:
\nsudo dnf install sqlite-devel\n\n2. 在 Windows 上安装(vcpkg)
\n\n如果您使用 vcpkg:
\nvcpkg install sqlite3:x64-windows\nvcpkg integrate install\n\n之后,您可以在 Visual Studio 中包含 #include <sqlite3.h>。
3. 从源代码编译(通用方法)
\n\n从官方网站 sqlite.org 下载 sqlite3.c 和 sqlite3.h 文件。然后只需将它们添加到您的项目中:
g++ main.cpp sqlite3.c -o myapp -lpthread -ldl\n\n在 Windows 上,可能需要额外指定 -lws2_32。
快速入门:第一个使用 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