C++编程实战:SQLite数据库操作全解析

发表时间: 2023-11-28 08:23

在C++中使用SQLite数据库需要使用SQLite的C/C++接口。以下是一个简单的示例,演示如何在C++中使用SQLite,并提供了常见的查询、增加、修改和删除功能。为了使用SQLite,你需要下载SQLite的C/C++接口,并链接到你的项目中。

首先,确保你已经下载了SQLite的C/C++接口,然后将头文件和库文件包含到你的项目中。

然后,创建一个C++源文件,例如SQLiteExample.cpp,并添加以下代码:

#include <iostream>#include <sqlite3.h>// 创建数据库连接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 = "sample.db";    // 创建数据库连接    sqlite3* db = OpenDatabase(dbFilePath);    if (db) {        // 创建表        CreateTable(db);        // 插入数据        InsertData(db, "John Doe", 30);        // 查询数据        QueryData(db);        // 更新数据        UpdateData(db, 1, "Updated Name", 35);        // 查询更新后的数据        QueryData(db);        // 删除数据        DeleteData(db, 1);        // 查询删除后的数据        QueryData(db);        // 关闭数据库连接        CloseDatabase(db);    }    return 0;}

请注意,上述示例假设你已经下载了SQLite的C/C++接口,并且在项目中包含了相关的头文件和库文件。在实际应用中,你需要根据自己的需求修改数据库文件路径和调整连接方式。