SQLite3 常用函数介绍

SQLite 是一个轻量级的嵌入式数据库引擎,广泛用于各种应用程序中,包括移动应用和桌面软件。SQLite 提供了丰富的 C 语言 API,使得开发人员能够方便地与数据库进行交互。以下是 SQLite3 常用的一些函数介绍,这些函数可以帮助你完成数据库操作的基本任务。

SQLite3 常用函数介绍

1. 打开和关闭数据库
  • sqlite3_open(const char *filename, sqlite3 **ppDb)

    • 用途:打开一个数据库文件或创建一个新的数据库文件。
    • 参数
      • filename:数据库文件的路径。
      • ppDb:一个指向 sqlite3 * 的指针,用于存储数据库连接句柄。
    • 返回值:在成功时返回 SQLITE_OK,否则返回一个错误代码。
  • sqlite3_close(sqlite3 *db)

    • 用途:关闭一个已经打开的数据库连接。
    • 参数
      • db:指向 sqlite3 数据库连接的指针。
    • 返回值:在成功时返回 SQLITE_OK,否则返回一个错误代码。
2. 执行 SQL 语句
  • sqlite3_exec(sqlite3 *db, const char *zSql, void (*callback)(void*, int, char**, char**), void *pArg, char **pzErrmsg)

    • 用途:执行一条 SQL 语句,并可选择性地指定一个回调函数来处理查询结果。
    • 参数
      • db:指向 sqlite3 数据库连接的指针。
      • zSql:要执行的 SQL 语句字符串。
      • callback:一个回调函数指针,用于处理查询结果。
      • pArg:传递给回调函数的任意数据。
      • pzErrmsg:用于存储错误信息的指针。
    • 返回值:返回一个 SQLite 错误代码。
  • sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail)

    • 用途:预编译一条 SQL 语句。
    • 参数
      • db:指向 sqlite3 数据库连接的指针。
      • zSql:要预编译的 SQL 语句字符串。
      • nByte:SQL 语句字符串的字节数(通常设为 -1 表示整个字符串)。
      • ppStmt:用于存储预编译的 SQL 语句句柄的指针。
      • pzTail:用于存储 SQL 语句末尾剩余部分的指针(通常忽略)。
    • 返回值:返回一个 SQLite 错误代码。
  • sqlite3_step(sqlite3_stmt *pStmt)

    • 用途:执行预编译的 SQL 语句的下一步。
    • 参数
      • pStmt:指向预编译的 SQL 语句句柄的指针。
    • 返回值:返回一个 SQLite 错误代码,表示执行状态。
  • sqlite3_finalize(sqlite3_stmt *pStmt)

    • 用途:释放预编译的 SQL 语句句柄。
    • 参数
      • pStmt:指向预编译的 SQL 语句句柄的指针。
    • 返回值:返回一个 SQLite 错误代码。
3. 错误处理
  • sqlite3_errmsg(sqlite3 *db)
    • 用途:获取最近发生的错误的文本描述。
    • 参数
      • db:指向 sqlite3 数据库连接的指针。
    • 返回值:返回一个字符串,描述最近发生的错误。
4. 数据库事务
  • sqlite3_exec(sqlite3 *db, const char *zSql, void (*callback)(void*, int, char**, char**), void *pArg, char **pzErrmsg)
    • 用途:执行事务相关的 SQL 语句(如 BEGIN, COMMIT, ROLLBACK)。
    • 参数
      • db:指向 sqlite3 数据库连接的指针。
      • zSql:要执行的 SQL 语句字符串。
      • callback:一个回调函数指针,用于处理查询结果。
      • pArg:传递给回调函数的任意数据。
      • pzErrmsg:用于存储错误信息的指针。
    • 返回值:返回一个 SQLite 错误代码。
5. 数据操作
  • sqlite3_bind_* 系列函数

    • 用途:绑定参数到预编译的 SQL 语句。
    • 示例
      • sqlite3_bind_text(sqlite3_stmt *pStmt, int iParam, const char *zText, int nText, void (*xFree)(void *))
        • 用途:绑定一个文本参数到预编译的 SQL 语句。
      • sqlite3_bind_int(sqlite3_stmt *pStmt, int iParam, int iValue)
        • 用途:绑定一个整数参数到预编译的 SQL 语句。
      • sqlite3_bind_double(sqlite3_stmt *pStmt, int iParam, double dValue)
        • 用途:绑定一个浮点数参数到预编译的 SQL 语句。
  • sqlite3_column_* 系列函数

    • 用途:从预编译的 SQL 语句的结果集中检索数据。
    • 示例
      • sqlite3_column_text(sqlite3_stmt *pStmt, int iCol)
        • 用途:获取一个文本列的数据。
      • sqlite3_column_int(sqlite3_stmt *pStmt, int iCol)
        • 用途:获取一个整数列的数据。
      • sqlite3_column_double(sqlite3_stmt *pStmt, int iCol)
        • 用途:获取一个浮点数列的数据。
      • sqlite3_column_blob(sqlite3_stmt *pStmt, int iCol)
        • 用途:获取一个 BLOB 列的数据。

示例代码

下面是一个使用 SQLite3 C API 的完整示例,演示如何打开数据库、执行 SQL 语句、预编译 SQL 语句并处理结果:

#include <stdio.h>
#include <sqlite3.h>

// 回调函数,用于处理查询结果
static int callback(void *data, int argc, char **argv, char **azColName) {
    int i;
    fprintf((FILE *)data, "%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(int argc, char *argv[]) {
    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));
        sqlite3_close(db);
        return 1;
    }

    // 创建表
    const char *create_table_sql = "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER NOT NULL)";
    rc = sqlite3_exec(db, create_table_sql, 0, 0, &zErrMsg);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
        sqlite3_close(db);
        return 1;
    }

    // 插入数据
    const char *insert_sql = "INSERT INTO users (name, age) VALUES (?, ?)";
    sqlite3_stmt *stmt;
    rc = sqlite3_prepare_v2(db, insert_sql, -1, &stmt, NULL);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }

    // 绑定参数并执行插入
    const char *name = "Alice";
    int age = 30;
    rc = sqlite3_bind_text(stmt, 1, name, -1, SQLITE_TRANSIENT);
    rc |= sqlite3_bind_int(stmt, 2, age);
    rc = sqlite3_step(stmt);
    if (rc != SQLITE_DONE) {
        fprintf(stderr, "Insert error: %s\n", sqlite3_errmsg(db));
    }

    // 清理
    sqlite3_finalize(stmt);

    // 查询数据
    const char *select_sql = "SELECT name, age FROM users";
    rc = sqlite3_exec(db, select_sql, callback, stdout, &zErrMsg);
    if (rc != SQLITE_OK) {
        fprintf(stderr, "SQL error: %s\n", zErrMsg);
        sqlite3_free(zErrMsg);
    }

    // 关闭数据库
    sqlite3_close(db);

    return 0;
}

代码解释

  1. 打开数据库:使用 sqlite3_open 函数打开数据库文件。
  2. 创建表:使用 sqlite3_exec 函数执行 SQL 语句创建表。
  3. 预编译插入语句:使用 sqlite3_prepare_v2 函数预编译插入语句,并使用 sqlite3_bind_textsqlite3_bind_int 函数绑定参数。
  4. 执行插入语句:使用 sqlite3_step 函数执行预编译的插入语句。
  5. 预编译查询语句:使用 sqlite3_exec 函数执行查询语句,并使用回调函数 callback 处理查询结果。
  6. 关闭数据库:使用 sqlite3_close 函数关闭数据库连接。

总结

SQLite3 提供了一组强大的 C 语言 API,使得开发人员能够方便地进行数据库操作。通过上述介绍和示例代码,你可以了解到如何使用 SQLite3 API 打开和关闭数据库、执行 SQL 语句、处理查询结果等基本操作。如果你有任何其他问题或需要进一步的帮助,请随时提问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值