使用 C 语言和 SQLite3 的简单示例,演示如何创建数据库、创建表、插入数据以及查询数据。
示例代码 example.c
#include <stdio.h>
#include <sqlite3.h>
#pragma comment(lib, "sqlite3.lib")
int main() {
sqlite3 *db;
char *errMsg = 0;
int rc;
rc = sqlite3_open("example.db", &db);
if (rc) {
fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));
return rc;
}
const char *sqlCreateTable = "CREATE TABLE IF NOT EXISTS Users (" \
"ID INTEGER PRIMARY KEY AUTOINCREMENT," \
"Name TEXT NOT NULL," \
"Age INTEGER NOT NULL);";
rc = sqlite3_exec(db, sqlCreateTable, 0, 0, &errMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "创建表失败: %s\n", errMsg);
sqlite3_free(errMsg);
} else {
printf("表创建成功。\n");
}
const char *sqlInsert = "INSERT INTO Users (Name, Age) VALUES ('Alice', 30);";
rc = sqlite3_exec(db, sqlInsert, 0, 0, &errMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "插入数据失败: %s\n", errMsg);
sqlite3_free(errMsg);
} else {
printf("数据插入成功。\n");
}
const char *sqlSelect = "SELECT * FROM Users;";
sqlite3_stmt *stmt;
rc = sqlite3_prepare_v2(db, sqlSelect, -1, &stmt, 0);
if (rc != SQLITE_OK) {
fprintf(stderr, "查询准备失败: %s\n", sqlite3_errmsg(db));
} else {
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);
return 0;
}
程序说明
- 打开数据库:程序尝试打开名为
example.db
的数据库,如果该数据库不存在,则会创建一个。
- 创建表:如果
Users
表不存在,程序将创建一个包含 ID、Name 和 Age 列的表。
- 插入数据:程序插入一条记录,用户名称为 "Alice",年龄为 30。
- 查询数据:程序查询
Users
表并打印所有记录。
- 关闭数据库:最后,程序关闭数据库连接。
这个示例展示了 SQLite 的基本用法,同时也展示了如何处理错误。
编译命令
cl.exe /nologo /utf-8 /w /EHsc /Ox /DNDEBUG /MD example.c /link sqlite3.lib
- 编译参数
/utf-8
代码页支持, /link sqlite3.lib
指定导入库文件名, 代码中有 #pragma comment(lib, "sqlite3.lib")
所以这里省略也可以
运行结果
表创建成功。
数据插入成功。
ID: 1, Name: Alice, Age: 30