SQLite 教程
SQLite 教程
什么是SQLite?
SQLite是一种嵌入式的关系数据库管理系统,它是一种轻量级的数据库,提供了SQL语言的全部功能。SQLite不需要独立的服务器进程或操作系统进程来管理。SQLite数据库只有一个文件,可以保存在任何地方,非常适合小型项目或者移动应用程序
SQLite 数据类型
SQLite支持以下数据类型:
- INTEGER:有符号整型,最大值为9223372036854775807,最小值为-9223372036854775808
- REAL:浮点型,存储浮点数值
- TEXT:字符串类型,存储文本字符串,可以包含任何字符,包括二进制数据
- BLOB:二进制大对象,可以存储任意二进制数据
- NULL:空值类型,可以用于任何数据类型的字段
SQLite 基础操作
连接数据库
在使用SQLite之前,需要先连接数据库,使用sqlite3_open
函数可以打开一个SQLite数据库文件,并创建一个数据库连接对象。
#include <sqlite3.h>
#include <stdio.h>
int main() {
sqlite3 *db;
char *err_msg = 0;
int rc = sqlite3_open("test.db", &db);
if (rc != SQLITE_OK) {
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
sqlite3_close(db);
return 0;
}
执行SQL语句
使用SQLite执行SQL语句非常简单,使用sqlite3_exec
函数可以执行任意的SQL语句,并将执行的结果输出到回调函数中。回调函数需要接收4个参数,分别表示查询结果的行号、列数、每个单元格的值和参数。
#include <sqlite3.h>
#include <stdio.h>
static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
int i;
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 *err_msg = 0;
int rc = sqlite3_open("test.db", &db);
if (rc != SQLITE_OK) {
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
char *sql = "SELECT * FROM test";
rc = sqlite3_exec(db, sql, callback, 0, &err_msg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", err_msg);
sqlite3_free(err_msg);
}
sqlite3_close(db);
return 0;
}
插入数据
使用SQLite插入数据非常简单,只需要执行一条INSERT语句即可。SQLITE_OK 表示操作成功。
#include <sqlite3.h>
#include <stdio.h>
int main() {
sqlite3 *db;
char *err_msg = 0;
int rc = sqlite3_open("test.db", &db);
if (rc != SQLITE_OK) {
fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
char *sql = "INSERT INTO test (name, age) VALUES ('Tom', 25)";
rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", err_msg);
sqlite3_free(err_msg);
}
sqlite3_close(db);
return 0;
}
总结
SQLite是目前为止最流行的嵌入式数据库之一,拥有如此多的数据库类型和功能,却还是拥有很小的数据唯一性。任何人都可以从头开始实现SQLite的源代码,而且SQLite的源代码行数非常少,只有几十万行。SQLite非常适合处理小型脱机应用程序的数据存储,它是一个很好的数据库选择。