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非常适合处理小型脱机应用程序的数据存储,它是一个很好的数据库选择。