当涉及到C嵌入式SQL与SQLite的应用时,以下是一个清晰的示例,用于说明如何在C程序中嵌入SQLite数据库并执行基本的SQL操作。
1. 准备工作
- 首先,确保你已经从SQLite的官方网站下载了适用于你的操作系统的SQLite库(如
sqlite3.h
和sqlite3.dll
或libsqlite3.so
等)。 - 在你的C项目中,配置好SQLite的头文件和库文件路径,以便在编译时能够正确链接。
2. 示例代码
下面是一个简单的C程序,它展示了如何连接到SQLite数据库、创建一个表、插入数据、查询数据以及断开连接。
#include <stdio.h>
#include <sqlite3.h>
int main() {
sqlite3 *db;
char *err_msg = 0;
int rc;
// 1. 打开(或创建)数据库
rc = sqlite3_open(":memory:", &db); // 使用内存数据库,或者可以替换为文件路径
if (rc) {
fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));
return 1;
}
// 2. 执行SQL语句创建表
const char *sql = "CREATE TABLE IF NOT EXISTS Students(Id INTEGER PRIMARY KEY, Name TEXT, Age INTEGER);";
rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL错误: %s\n", err_msg);
sqlite3_free(err_msg);
sqlite3_close(db);
return 1;
}
// 3. 插入数据
sql = "INSERT INTO Students(Name, Age) VALUES('张三', 20);";
rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL错误: %s\n", err_msg);
sqlite3_free(err_msg);
sqlite3_close(db);
return 1;
}
// 4. 查询数据
sql = "SELECT * FROM Students;";
sqlite3_stmt *stmt;
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
if (rc != 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 unsigned char *name = sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);
printf("ID: %d, Name: %s, Age: %d\n", id, name, age);
}
// 释放预编译的SQL语句
sqlite3_finalize(stmt);
// 5. 关闭数据库连接
sqlite3_close(db);
return 0;
}
3. 编译和运行
- 使用C编译器(如gcc)编译你的程序,并链接SQLite库。
- 运行编译后的程序,观察输出结果。
4. 注意事项
- 在实际应用中,你可能需要处理更复杂的SQL语句和错误情况。
- 示例中使用了内存数据库(
:memory:
),这意味着数据库只存在于程序运行期间。如果你需要持久化存储,可以提供一个文件路径作为sqlite3_open
函数的参数。 - SQLite支持多种数据类型(如INTEGER、TEXT、REAL、BLOB等),并且提供了丰富的SQL函数和操作符。你可以根据自己的需求使用它们。