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语言实现扫雷小游戏的示例代码的完整攻略。 设计游戏界面 在开始编写扫雷小游戏的代码之前,我们先需要设计游戏界面。游戏板块一般是一个二维矩阵,可以通过字符来表示不同单元是否有雷。我们可以借助C语言中的二维字符数组来实现这一点。下面是一个游戏板块的初始界面代…

    C 2023年5月24日
    00
  • C++ Boost Pool超详细讲解

    C++ Boost Pool超详细讲解 概述 C++ Boost库中的Pool库是一个有用的内存分配和管理库。它是一个头文件库,可以在C++程序中使用,使内存管理变得更加高效和简单。它的目标是在没有垃圾收集器的情况下提高内存分配的效率。 Pool库提供了两个主要的类来支持内存池: boost::pool: 这个类定义了一个通用内存池,可以用于管理任意大小的对…

    C 2023年5月23日
    00
  • 抖音蓝v认证有什么作用?抖音蓝v认证的好处和坏处分析

    抖音蓝v认证有什么作用? 什么是抖音蓝V认证? 抖音蓝V认证是抖音对于特定领域或人群进行身份验证后授予的官方认证标识,代表着用户在该领域具有一定的知名度和影响力。抖音蓝V认证的标志是一个蓝色“V”字,出现在用户个人资料页上方。 抖音蓝V认证有什么作用? 1. 提升用户信任度 在众多抖音用户中,拥有蓝V认证的用户会比普通用户更容易获得其他用户的信任。因为蓝V认…

    C 2023年5月22日
    00
  • Matlab 2018a怎么安装?Matlab R2018a官方激活安装详细教程(附下载)

    下面我给您详细讲解“Matlab 2018a怎么安装?Matlab R2018a官方激活安装详细教程(附下载)”的完整攻略。 Matlab 2018a安装步骤: 首先,进入MathWorks官网,找到Matlab 2018a的下载页面,下载相应的安装程序 下载完成后,双击安装程序,出现安装窗口。选择“安装Matlab”,然后点击“下一步”。 阅读许可协议,并…

    C 2023年5月22日
    00
  • 浅谈C++的几种从键盘输入方式

    浅谈C++的几种从键盘输入方式 在C++中,从键盘获取用户输入是很常见的操作。本文将介绍几种常用的获取输入的方式。 1. cin cin是iostream库提供的标准输入流对象,它支持多种数据类型的输入。使用cin获取用户输入的方法是使用>>运算符。以下是一个简单的示例代码: #include <iostream> using nam…

    C 2023年5月23日
    00
  • php7 错误处理机制修改实例分析

    PHP7 错误处理机制修改实例分析 一、背景 在PHP7中,错误处理机制发生了一些变化。具体来说,PHP7增加了Throwable接口和Error类,用于代替旧版的Exception类。此外,PHP7还引入了一种新的错误处理器:Throwable处理器。Throwable处理器是一种标准的PHP异常处理方式,可以通过使用try-catch语句来捕获和处理所有…

    C 2023年5月22日
    00
  • C语言控制进程之进程等待详解

    C语言控制进程之进程等待详解 什么是进程等待 进程等待是指程序在执行过程中,等待子进程结束并获取子进程的退出状态,以便对进程执行状态进行处理。 进程等待函数 进程等待函数是 头文件中定义的,常用的有以下两个: pid_t wait(int *status) wait()函数会等待任意一个子进程,获取子进程的退出状态并存储到status指向的整型变量中,返回结…

    C 2023年5月30日
    00
  • 型号为a1526的iphone5c 联通版4g网络怎么开启 联通版iphone5c a1526越狱后破解4g教程

    那么针对这个问题,我将分为两个部分来进行回答。 如何开启型号为a1526的iphone5c联通版4G网络? 首先,您需要确认您的手机是否支持4G网络。型号为a1526的iphone5c 联通版是支持4G网络的,但需满足以下条件: 手机系统为iOS 8.0及以上版本 必须使用联通的USIM卡 在中国大陆地区开通4G网络服务 确认您的手机符合以上条件后,您需要进…

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