SQLite3增删改查(C

#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;

}

相关推荐
robottt6664 分钟前
2026国产协作机器人排名与选型指南:越疆、遨博、节卡、珞石解析
大数据·数据库·人工智能
郑州光合科技余经理13 分钟前
本地生活系统:多业务订单字段怎么分账本导出
java·开发语言·前端·数据库·uni-app·php·ai编程
weixin199701080161 小时前
《跨境二手ERP的3种对接模式:自研API / SaaS中间件 / 平台认证服务商,怎么选?》(附Python源码)
开发语言·python·中间件
weixin_460443563 小时前
考试监控大屏为什么不能直接查数据库?WebSocket、Redis与实时数据聚合架构设计
数据库·redis·在线考试系统·培训考试系统·煤矿培训考试系统·煤矿在线考试系统·宏远培训考试系统
风哥2号3 小时前
数据库教程FGMT02‑生产环境Linux+Oracle19c安装配置与项目实战
linux·数据库·ffmpeg
传奇开心果编程3 小时前
【Rust入门知识点学与练】第24课:Trait 基础
开发语言·学习·rust
wuminyu6 小时前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
九皇叔叔7 小时前
【第二章】Redis基础入门:Redis是什么、为什么快以及核心特性详解
数据库·redis·缓存
云和恩墨7 小时前
删库不跑路,回滚极速触达——zData S“旁路日志”持续保护原理深剖
数据库
Blockbuater_drug8 小时前
FreeSASA: 开源 SASA 计算库,pip 一条命令替代 NACCESS
c语言·开源·sasa·freesasa·溶剂可及表面积·naccess·python api