SQLite数据库操作详解
SQLite是一种轻量级的数据库,广泛应用在移动端和嵌入式系统中。它以其简单易用和零配置的特点受到广泛欢迎。本文将详细介绍SQLite数据库的操作,包括数据库的创建、表的操作、数据的插入、查询、更新和删除等。
数据库的创建
在使用SQLite数据库之前,我们首先需要创建一个数据库。SQLite数据库的创建非常简单,只需调用sqlite3_open函数即可创建一个数据库连接。
#include <sqlite3.h>
#include <stdio.h>
int main() {
sqlite3 *db;
int rc = sqlite3_open("test.db", &db);
if (rc != SQLITE_OK) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return(1);
} else {
fprintf(stderr, "Opened database successfully\n");
}
sqlite3_close(db);
return 0;
}
运行以上代码会在当前目录下创建一个名为test.db的数据库文件。如果数据库创建成功,会输出”Opened database successfully”,否则会输出错误信息。
表的操作
在SQLite数据库中,表是存储数据的基本单元。我们可以通过SQL语句来创建表、插入数据、查询数据、更新数据和删除数据。下面是一个简单的示例,演示如何创建一个名为students的表,并插入一条数据。
#include <sqlite3.h>
#include <stdio.h>
int main() {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return(1);
} else {
fprintf(stderr, "Opened database successfully\n");
}
char *sql = "CREATE TABLE students (" \
"id INTEGER PRIMARY KEY AUTOINCREMENT," \
"name TEXT NOT NULL," \
"age INTEGER NOT NULL);";
rc = sqlite3_exec(db, sql, NULL, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Table created successfully\n");
}
sqlite3_close(db);
return 0;
}
运行以上代码会在test.db数据库中创建一个名为students的表。可以使用SQLite Studio等工具连接到test.db数据库查看表的结构。
数据的插入、查询、更新和删除
接下来,我们将演示如何插入数据、查询数据、更新数据和删除数据。下面是一个完整的示例代码,演示了这几种操作。
#include <sqlite3.h>
#include <stdio.h>
int callback(void *data, int argc, char **argv, char **azColName) {
int i;
fprintf(stderr, "%s: ", (const char*)data);
for(i = 0; i < argc; i++) {
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main() {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return(1);
} else {
fprintf(stderr, "Opened database successfully\n");
}
// 插入数据
char *insert_sql = "INSERT INTO students (name, age) VALUES ('Alice', 20);";
rc = sqlite3_exec(db, insert_sql, NULL, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Insert data successfully\n");
}
// 查询数据
char *select_sql = "SELECT * FROM students;";
char *msg = "Callback function called";
rc = sqlite3_exec(db, select_sql, callback, (void*)msg, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
// 更新数据
char *update_sql = "UPDATE students SET age = 21 WHERE name = 'Alice';";
rc = sqlite3_exec(db, update_sql, NULL, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Update data successfully\n");
}
// 删除数据
char *delete_sql = "DELETE FROM students WHERE name = 'Alice';";
rc = sqlite3_exec(db, delete_sql, NULL, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Delete data successfully\n");
}
sqlite3_close(db);
return 0;
}
运行以上代码会依次插入一条数据、查询所有数据、更新数据和删除数据。可以通过回调函数callback输出查询结果。
总结
本文详细介绍了SQLite数据库的操作,包括数据库的创建、表的操作、数据的插入、查询、更新和删除等。SQLite是一个轻量级的数据库引擎,适用于移动端和嵌入式系统。通过学习SQLite数据库操作,可以更好地应用SQLite解决实际问题。