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++接口,并且在项目中包含了相关的头文件和库文件。在实际应用中,你需要根据自己的需求修改数据库文件路径和调整连接方式。