C++中SQLite数据库操作实例:查询、增加、修改、删除一网打尽
在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++接口,并且在项目中包含了相关的头文件和库文件。在实际应用中,你需要根据自己的需求修改数据库文件路径和调整连接方式。