首页 话题 小组 问答 好文 用户 我的社区 域名交易 唠叨

[SQLite]掌握SQLite,C语言编程利器:高效数据库交互全攻略

发布于 2025-06-23 19:36:20
0
150

SQLite是一款轻量级的数据库管理系统,它以库的形式存在,可以嵌入到C语言程序中。由于其体积小、速度快、易于使用,SQLite在嵌入式系统、移动应用和小型项目中非常受欢迎。本文将详细介绍如何在C语言...

SQLite是一款轻量级的数据库管理系统,它以库的形式存在,可以嵌入到C语言程序中。由于其体积小、速度快、易于使用,SQLite在嵌入式系统、移动应用和小型项目中非常受欢迎。本文将详细介绍如何在C语言中使用SQLite,包括安装、配置、基本操作和高级应用。

一、SQLite的安装与配置

1.1 安装SQLite

由于SQLite是一个库,因此不需要像传统数据库那样安装服务器。你只需要下载SQLite的源代码或者预编译的二进制文件即可。

  • 源代码安装:从SQLite官网下载源代码,解压后使用编译器进行编译。
    tar -xvf sqlite-amalgamation-3.35.0.tar.gz
    cd sqlite-amalgamation-3.35.0
    gcc -o sqlite3 sqlite3.c
  • 预编译二进制文件安装:从SQLite官网下载预编译的二进制文件,解压后将其包含到项目的路径中。

1.2 配置SQLite

在C语言程序中,你需要包含SQLite的头文件,并链接SQLite库。

#include 

在编译程序时,需要链接SQLite库。

gcc -o myprogram myprogram.c -lsqlite3

二、SQLite的基本操作

2.1 创建数据库

sqlite3 *db;
char *err_msg = 0;
// 打开数据库
if (sqlite3_open("mydatabase.db", &db) != SQLITE_OK) { fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1;
}
// 创建表
const char *sql = "CREATE TABLE IF NOT EXISTS employees (" "id INTEGER PRIMARY KEY, " "name TEXT NOT NULL, " "age INTEGER);";
char *errmsg;
if (sqlite3_exec(db, sql, 0, 0, &errmsg) != SQLITE_OK) { fprintf(stderr, "SQL 错误: %s\n", errmsg); sqlite3_free(errmsg); sqlite3_close(db); return 1;
}
sqlite3_close(db);

2.2 插入数据

sqlite3 *db;
char *err_msg = 0;
// 打开数据库
if (sqlite3_open("mydatabase.db", &db) != SQLITE_OK) { fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1;
}
// 插入数据
const char *sql = "INSERT INTO employees (name, age) VALUES ('张三', 30);";
if (sqlite3_exec(db, sql, 0, 0, &err_msg) != SQLITE_OK) { fprintf(stderr, "SQL 错误: %s\n", err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1;
}
sqlite3_close(db);

2.3 查询数据

sqlite3 *db;
char *err_msg = 0;
// 打开数据库
if (sqlite3_open("mydatabase.db", &db) != SQLITE_OK) { fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1;
}
// 查询数据
const char *sql = "SELECT * FROM employees WHERE age > 25;";
sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(db, sql, -1, &stmt, 0) != SQLITE_OK) { fprintf(stderr, "SQL 错误: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1;
}
while (sqlite3_step(stmt) == SQLITE_ROW) { int id = sqlite3_column_int(stmt, 0); const char *name = (const char *)sqlite3_column_text(stmt, 1); int age = sqlite3_column_int(stmt, 2); printf("ID: %d, Name: %s, Age: %d\n", id, name, age);
}
sqlite3_finalize(stmt);
sqlite3_close(db);

2.4 更新和删除数据

更新和删除数据的操作与查询类似,只是执行的SQL语句不同。

// 更新数据
const char *sql = "UPDATE employees SET age = 35 WHERE id = 1;";
if (sqlite3_exec(db, sql, 0, 0, &err_msg) != SQLITE_OK) { fprintf(stderr, "SQL 错误: %s\n", err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1;
}
// 删除数据
const char *sql = "DELETE FROM employees WHERE id = 1;";
if (sqlite3_exec(db, sql, 0, 0, &err_msg) != SQLITE_OK) { fprintf(stderr, "SQL 错误: %s\n", err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1;
}

三、SQLite的高级应用

3.1 事务处理

SQLite支持事务处理,可以保证数据的一致性和完整性。

// 开始事务
sqlite3_exec(db, "BEGIN TRANSACTION;", 0, 0, 0);
// 执行多个SQL语句
sqlite3_exec(db, "INSERT INTO employees (name, age) VALUES ('李四', 28);", 0, 0, 0);
sqlite3_exec(db, "UPDATE employees SET age = 29 WHERE id = 2;", 0, 0, 0);
// 提交事务
sqlite3_exec(db, "COMMIT;", 0, 0, 0);

3.2 视图和触发器

SQLite支持创建视图和触发器,可以扩展数据库的功能。

// 创建视图
const char *sql = "CREATE VIEW employee_view AS SELECT * FROM employees WHERE age > 30;";
if (sqlite3_exec(db, sql, 0, 0, &err_msg) != SQLITE_OK) { fprintf(stderr, "SQL 错误: %s\n", err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1;
}
// 创建触发器
const char *sql = "CREATE TRIGGER after_insert_trigger " "AFTER INSERT ON employees " "BEGIN " "UPDATE employees SET age = age + 1 WHERE id = NEW.id; " "END;";
if (sqlite3_exec(db, sql, 0, 0, &err_msg) != SQLITE_OK) { fprintf(stderr, "SQL 错误: %s\n", err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1;
}

四、总结

本文详细介绍了如何在C语言中使用SQLite,包括安装、配置、基本操作和高级应用。通过学习本文,你可以掌握SQLite的基本用法,并将其应用到实际项目中。在实际开发过程中,请根据项目需求灵活运用SQLite的特性,提高应用程序的效率和稳定性。

评论
一个月内的热帖推荐
啊龙
Lv.1普通用户

9545

帖子

31

小组

3242

积分

赞助商广告
站长交流