Linux系统下SQLite3使用教程(二)
SQLite 是一个轻量级的嵌入式数据库,非常适合用于小型项目或学习数据库操作。本文将教你如何在 Linux 环境下,使用 C 语言与 SQLite3 进行交互,完成增删改查操作。
一、准备工作
1. 安装 SQLite3
在 Linux 系统中,可以通过以下命令安装 SQLite3:
sudo apt-get update
sudo apt-get install sqlite3
安装完成后,可以通过以下命令验证安装是否成功:
sqlite3 --version
2. 安装 SQLite3 开发库
为了在 C 语言中使用 SQLite3,还需要安装开发库:
sudo apt-get install libsqlite3-dev
3. 创建测试数据库
在当前目录下创建一个名为 test.db 的 SQLite 数据库文件:
sqlite3 test.db
进入 SQLite 命令行后,创建一个测试表 users:
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL
);
退出 SQLite:
.exit
二、C 语言与 SQLite3 的交互
1. 包含头文件
在 C 程序中使用 SQLite3,需要包含 SQLite3 的头文件:
#include <sqlite3.h>
2. 打开数据库
使用 sqlite3_open() 函数打开数据库文件:
sqlite3* db;
int rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return 1;
}
3. 执行 SQL 语句
SQLite3 提供了 sqlite3_exec() 函数,用于执行 SQL 语句。例如:
const char* sql = "INSERT INTO users (name, age) VALUES ('Alice', 25);";
rc = sqlite3_exec(db, sql, 0, 0, &errMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", errMsg);
sqlite3_free(errMsg);
}
4. 查询数据
对于查询操作,可以使用 sqlite3_prepare_v2() 和 sqlite3_step() 函数。例如:
const char* selectSql = "SELECT id, name, age FROM users;";
sqlite3_stmt* stmt;
rc = sqlite3_prepare_v2(db, selectSql, -1, &stmt, NULL);
if (rc == SQLITE_OK) {
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);
5. 关闭数据库
完成操作后,记得关闭数据库:
sqlite3_close(db);
三、完整示例代码
以下是一个完整的示例代码,演示如何实现增删改查操作:
#include <stdio.h>
#include <sqlite3.h>
int main() {
sqlite3* db;
int rc;
const char* errMsg;
// 打开数据库
rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return 1;
}
// 插入数据
const char* insertSql = "INSERT INTO users (name, age) VALUES ('Bob', 30);";
rc = sqlite3_exec(db, insertSql, 0, 0, &errMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "Insert error: %s\n", errMsg);
sqlite3_free((void*)errMsg);
}
// 查询数据
const char* selectSql = "SELECT id, name, age FROM users;";
sqlite3_stmt* stmt;
rc = sqlite3_prepare_v2(db, selectSql, -1, &stmt, NULL);
if (rc == SQLITE_OK) {
printf("\nQuery Results:\n");
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);
// 更新数据
const char* updateSql = "UPDATE users SET age = 31 WHERE name = 'Bob';";
rc = sqlite3_exec(db, updateSql, 0, 0, &errMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "Update error: %s\n", errMsg);
sqlite3_free((void*)errMsg);
}
// 删除数据
const char* deleteSql = "DELETE FROM users WHERE name = 'Alice';";
rc = sqlite3_exec(db, deleteSql, 0, 0, &errMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "Delete error: %s\n", errMsg);
sqlite3_free((void*)errMsg);
}
// 关闭数据库
sqlite3_close(db);
printf("\nDatabase closed.\n");
return 0;
}
四、编译与运行
使用以下命令编译代码:
gcc -o sqlite_example sqlite_example.c -lsqlite3
运行程序:
./sqlite_example
五、总结
通过本文,你学会了如何在 Linux 下使用 C 语言与 SQLite3 进行交互,完成增删改查操作。SQLite3 是一个非常轻量级的数据库,适合嵌入式系统或小型项目。如果你对数据库操作有更高的需求,可以进一步学习 SQLite3 的高级功能,例如事务处理、索引优化等。