#include
#include "sqlite3/sqlite3.h"
#pragma comment(lib, "sqlite3/sqlite3.lib")
int main() {
sqlite3* db;
int rc = sqlite3_open("test.db", &db);
if (rc) {
std::cerr << "打开数据库失败: " << sqlite3_errmsg(db) << std::endl;
return 1;
}
// 创建表
const char* create_sql = "CREATE TABLE IF NOT EXISTS users ("
"id INTEGER PRIMARY KEY AUTOINCREMENT,"
"name TEXT NOT NULL,"
"age INTEGER);";
rc = sqlite3_exec(db, create_sql, nullptr, nullptr, nullptr);
if (rc != SQLITE_OK) {
std::cerr << "创建表失败: " << sqlite3_errmsg(db) << std::endl;
sqlite3_close(db);
return 1;
}
// 插入测试数据
const char* insert_sql = "INSERT INTO users (name, age) VALUES ('Alice', 30), ('Bob', 25), ('Charlie', 35);";
rc = sqlite3_exec(db, insert_sql, nullptr, nullptr, nullptr);
if (rc != SQLITE_OK) {
std::cerr << "插入数据失败: " << sqlite3_errmsg(db) << std::endl;
}
// 查看数据
std::cout << "===== 初始数据 =====" << std::endl;
const char* select_sql = "SELECT * FROM users;";
sqlite3_stmt* stmt;
rc = sqlite3_prepare_v2(db, select_sql, -1, &stmt, nullptr);
if (rc == SQLITE_OK) {
while (sqlite3_step(stmt) == SQLITE_ROW) {
int id = sqlite3_column_int(stmt, 0);
const unsigned char* name = sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);
std::cout << "ID: " << id << ", Name: " << name << ", Age: " << age << std::endl;
}
sqlite3_finalize(stmt);
}
else {
std::cerr << "查询失败: " << sqlite3_errmsg(db) << std::endl;
}
// 更新
const char* update_sql = "UPDATE users SET age = 31 WHERE name = 'Alice';";
rc = sqlite3_exec(db, update_sql, nullptr, nullptr, nullptr);
if (rc != SQLITE_OK) {
std::cerr << "更新失败: " << sqlite3_errmsg(db) << std::endl;
}
else {
std::cout << "\n更新成功,影响行数: " << sqlite3_changes(db) << std::endl;
}
// 删除
const char* delete_sql = "DELETE FROM users WHERE name = 'Charlie';";
rc = sqlite3_exec(db, delete_sql, nullptr, nullptr, nullptr);
if (rc != SQLITE_OK) {
std::cerr << "删除失败: " << sqlite3_errmsg(db) << std::endl;
}
else {
std::cout << "删除成功,影响行数: " << sqlite3_changes(db) << std::endl;
}
// 再次查看
std::cout << "\n===== 修改后数据 =====" << std::endl;
rc = sqlite3_prepare_v2(db, select_sql, -1, &stmt, nullptr);
if (rc == SQLITE_OK) {
while (sqlite3_step(stmt) == SQLITE_ROW) {
int id = sqlite3_column_int(stmt, 0);
const unsigned char* name = sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);
std::cout << "ID: " << id << ", Name: " << name << ", Age: " << age << std::endl;
}
sqlite3_finalize(stmt);
}
else {
std::cerr << "查询失败: " << sqlite3_errmsg(db) << std::endl;
}
sqlite3_close(db);
return 0;
}