C++操作SQLite简明教程

C++操作SQLite简明教程

本教程将介绍如何使用C++操作SQLite数据库,包括数据库的创建、表的创建、数据的插入、查询和更新等常见操作。

安装SQLite

在开始之前,需要先安装SQLite。SQLite是一个轻型数据库,可以在各个操作系统上使用。在Ubuntu系统上,可以通过以下命令安装:

sudo apt-get install sqlite3 libsqlite3-dev

对于其他系统,可以去官网下载相应的安装包进行安装。

创建和连接数据库

要创建一个新的数据库,可以使用以下代码:

#include <sqlite3.h>

int result = sqlite3_open("example.db", &database);
if (result != SQLITE_OK) {
    std::cerr << "Error opening database: " << sqlite3_errmsg(database) << std::endl;
    sqlite3_close(database);
    return false;
}

上述代码会在当前目录下创建一个名为example.db的数据库。如果数据库创建失败,将打印出错误信息,并关闭数据库连接。如果创建成功,可以通过sqlite3_close()函数关闭数据库连接。

创建表格

在数据库中创建表格,可以使用以下代码:

std::string sql = "CREATE TABLE example_table ( \
                   id INTEGER PRIMARY KEY, \
                   name TEXT, \
                   age INTEGER);";

int result = sqlite3_exec(database, sql.c_str(), nullptr, nullptr, &errorMsg);
if (result != SQLITE_OK) {
    std::cerr << "Error creating table: " << errorMsg << std::endl;
    sqlite3_free(errorMsg);
    return false;
}

以上代码创建了一个名为example_table的表格,包含了id、name和age三个字段。其中,id为整型,是该表格的主键;name为文本类型,age为整型。如果创建成功,将返回SQLITE_OK,否则将打印错误信息。在这里,使用sqlite3_free()函数释放存储错误信息的字符串指针。

插入数据

可以使用以下代码向表格中插入数据:

std::string sql = "INSERT INTO example_table (id, name, age) VALUES (1, 'Tom', 20);";

int result = sqlite3_exec(database, sql.c_str(), nullptr, nullptr, &errorMsg);
if (result != SQLITE_OK) {
    std::cerr << "Error inserting data: " << errorMsg << std::endl;
    sqlite3_free(errorMsg);
    return false;
}

以上代码向example_table表格中插入了一条数据,其中id为1,name为Tom,age为20。如果插入成功,将返回SQLITE_OK,否则将打印错误信息并返回false。

查询数据

可以使用以下代码来查询表格中的数据:

std::string sql = "SELECT * FROM example_table;";

sqlite3_stmt* statement;
int result = sqlite3_prepare_v2(database, sql.c_str(), -1, &statement, nullptr);
if (result != SQLITE_OK) {
    std::cerr << "Error preparing statement: " << sqlite3_errmsg(database) << std::endl;
    sqlite3_finalize(statement);
    return false;
}

while (sqlite3_step(statement) == SQLITE_ROW) {
    int id = sqlite3_column_int(statement, 0);
    std::string name = reinterpret_cast<const char*>(sqlite3_column_text(statement, 1));
    int age = sqlite3_column_int(statement, 2);

    std::cout << "id: " << id << ", name: " << name << ", age: " << age << std::endl;
}

sqlite3_finalize(statement);

以上代码使用了sqlite3_prepare_v2()函数准备了一个查询语句,然后使用sqlite3_step()函数遍历查询得到的结果集。在遍历结果集的过程中,通过sqlite3_column_int()和sqlite3_column_text()等函数获取指定字段的值。注意,在查询完毕后,需要使用sqlite3_finalize()函数释放查询准备的sqlite3_stmt对象。

更新数据

可以使用以下代码来更新表格中的数据:

std::string sql = "UPDATE example_table SET age=25 WHERE name='Tom';";

int result = sqlite3_exec(database, sql.c_str(), nullptr, nullptr, &errorMsg);
if (result != SQLITE_OK) {
    std::cerr << "Error updating data: " << errorMsg << std::endl;
    sqlite3_free(errorMsg);
    return false;
}

以上代码将example_table表格中name为Tom的记录的age字段更新为25。如果更新成功,将返回SQLITE_OK,否则将打印错误信息并返回false。

示例说明

以下为两个示例,分别说明了如何使用本教程中的代码进行数据库操作。

示例1:创建表格并插入数据

#include <iostream>
#include <sqlite3.h>

int main() {
    sqlite3* database;

    int result = sqlite3_open("example.db", &database);
    if (result != SQLITE_OK) {
        std::cerr << "Error opening database: " << sqlite3_errmsg(database) << std::endl;
        sqlite3_close(database);
        return -1;
    }

    std::string sql = "CREATE TABLE example_table ( \
                       id INTEGER PRIMARY KEY, \
                       name TEXT, \
                       age INTEGER);";

    char* errorMsg;
    result = sqlite3_exec(database, sql.c_str(), nullptr, nullptr, &errorMsg);
    if (result != SQLITE_OK) {
        std::cerr << "Error creating table: " << errorMsg << std::endl;
        sqlite3_free(errorMsg);
        sqlite3_close(database);
        return -1;
    }

    sql = "INSERT INTO example_table (id, name, age) VALUES (1, 'Tom', 20);";

    result = sqlite3_exec(database, sql.c_str(), nullptr, nullptr, &errorMsg);
    if (result != SQLITE_OK) {
        std::cerr << "Error inserting data: " << errorMsg << std::endl;
        sqlite3_free(errorMsg);
        sqlite3_close(database);
        return -1;
    }

    sqlite3_close(database);
    return 0;
}

以上代码创建了一个名为example_table的表格,并向其中插入了一条数据。如果执行成功,将在当前目录下生成一个名为example.db的数据库文件。

示例2:查询表格中的数据并更新

#include <iostream>
#include <sqlite3.h>

int main() {
    sqlite3* database;

    int result = sqlite3_open("example.db", &database);
    if (result != SQLITE_OK) {
        std::cerr << "Error opening database: " << sqlite3_errmsg(database) << std::endl;
        sqlite3_close(database);
        return -1;
    }

    std::string sql = "SELECT * FROM example_table;";
    sqlite3_stmt* statement;
    result = sqlite3_prepare_v2(database, sql.c_str(), -1, &statement, nullptr);
    if (result != SQLITE_OK) {
        std::cerr << "Error preparing statement: " << sqlite3_errmsg(database) << std::endl;
        sqlite3_finalize(statement);
        sqlite3_close(database);
        return -1;
    }

    while (sqlite3_step(statement) == SQLITE_ROW) {
        int id = sqlite3_column_int(statement, 0);
        std::string name = reinterpret_cast<const char*>(sqlite3_column_text(statement, 1));
        int age = sqlite3_column_int(statement, 2);

        std::cout << "id: " << id << ", name: " << name << ", age: " << age << std::endl;
    }

    sqlite3_finalize(statement);

    sql = "UPDATE example_table SET age=25 WHERE name='Tom';";
    char* errorMsg;
    result = sqlite3_exec(database, sql.c_str(), nullptr, nullptr, &errorMsg);
    if (result != SQLITE_OK) {
        std::cerr << "Error updating data: " << errorMsg << std::endl;
        sqlite3_free(errorMsg);
        sqlite3_close(database);
        return -1;
    }

    sqlite3_close(database);
    return 0;
}

以上代码查询了example_table表格中的所有数据,并输出结果。然后,将表格中name为Tom的记录的age字段更新为25。如果执行成功,将更新数据库文件中的数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++操作SQLite简明教程 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C++中各种可调用对象深入讲解

    C++中可调用对象的深入讲解 什么是可调用对象? 在C++中,可调用对象是指可以被调用、执行的实体。常见的可调用对象包括函数、类成员函数、lambda表达式等。C++中的可调用对象都可以作为函数参数或返回值进行传递。 函数指针作为可调用对象 在C++中,函数指针也是可调用对象之一。定义函数指针的方式如下: int (*funcPtr)(int, int); …

    C 2023年5月22日
    00
  • PowerShell时间记录脚本

    关于“PowerShell时间记录脚本”的完整攻略,我可以为您进行详细讲解。 简介 首先,让我们来了解一下“PowerShell时间记录脚本”的简介。该脚本可以帮助用户记录电脑运行的时间,并输出到指定的文本文件中。用户可以使用该脚本来记录自己在电脑上的时间消耗,从而更好地管理时间和提高工作效率。 前置条件 在运行“PowerShell时间记录脚本”之前,用户…

    C 2023年5月22日
    00
  • C++重载运算符的规则详解

    C++重载运算符的规则详解 在C++中,程序员可以重载许多运算符(operator),包括算术运算、关系运算、逻辑运算、位运算等等。这些运算符具有与常规函数相似的结构,因此也被称为“运算符重载函数”。本文将详细讲解C++重载运算符的规则。 1. 重载运算符的声明 重载运算符的声明与常规函数的声明类似。重载运算符的名称后跟着一对圆括号(),其中可选参数可以放在…

    C 2023年5月23日
    00
  • QT连接Mysql数据库的实现步骤

    好的。首先,我们需要安装 Qt 和 mysql 的相关驱动程序。安装完后,我们可以开始进行以下步骤: 步骤一:加载 mysql 驱动 在 Qt 中连接 mysql 数据库之前,我们需要在程序中先加载 mysql 驱动。在通常情况下,mysql 驱动是通过插件的方式来实现的。我们需要在项目的.pro 文件中加入以下代码: QT += sql QT += sql…

    C 2023年5月23日
    00
  • C语言深入探究程序的编译之预处理

    关于C语言深入探究程序的编译之预处理,我可以为您提供一份详细的攻略。如下所示: C语言深入探究程序的编译之预处理 什么是预处理 在C语言中,预处理就是一个在编译过程中的特殊阶段,它会在实际的编译之前,对源代码进行一些列的宏替换、条件编译、头文件包含等操作,以生成最终的源代码,供编译器进行编译。 预处理的过程 预处理的过程大致可以分为以下步骤: 删除所有的注释…

    C 2023年5月30日
    00
  • C++如何调用matlab函数

    要在C++中调用Matlab函数,可以使用Matlab Engine API提供的函数。Matlab Engine API是Matlab提供的一组C和C++函数,使得C++程序可以调用Matlab引擎并执行Matlab函数。 以下是在Visual Studio 2019中如何配置和调用Matlab的步骤: 1. 安装Matlab和Visual Studio …

    C 2023年5月23日
    00
  • Golang中tinyrpc框架的源码解读详解

    Golang中tinyrpc框架的源码解读详解 什么是tinyrpc框架? tinyrpc是一个轻量级的RPC(Remote Procedure Call)框架,用于构建分布式应用程序,客户端和服务器之间的通信通过网络进行。该框架基于Golang编写,因其高可用性和高性能而广泛受到开发者的青睐。 框架的核心分析 tinyrpc框架的核心是分布在客户端(cli…

    C 2023年5月23日
    00
  • C++四种case的详细介绍小结

    C++四种case的详细介绍小结 在C++中,switch语句可以使用四种语句类型,用于匹配不同的情况(case)。这四种语句类型是: case表达式常量 case枚举常量 case constexpr函数 不带表达式的case 下面我们来一一介绍。 1. case表达式常量 这种情况下,case后面直接跟一个常量表达式,如下所示: switch (n) {…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部