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日

相关文章

  • 三星Galaxy Book Flex值得入手吗 三星笔记本Galaxy Book Flex详细评测

    三星Galaxy Book Flex值得入手吗 三星笔记本Galaxy Book Flex详细评测 如果你正在寻找一款高性能、轻巧、功能强大的2合1笔记本,那么三星Galaxy Book Flex绝对值得一看。该笔记本采用最新一代的处理器,配备高清触摸屏和可旋转键盘,具备出色的性能和灵活的使用方式,让你随时随地体验高效便捷的计算体验。 性能和硬件 三星Gal…

    C 2023年5月22日
    00
  • springboot解决java.lang.ArrayStoreException异常

    当我们在使用Spring Boot时,有时候会遇到java.lang.ArrayStoreException异常,这是因为在编译期间未正确识别数组类型,导致在运行期间出现异常。下面我将介绍如何解决这个问题的完整攻略。 1. 理解java.lang.ArrayStoreException异常是什么 java.lang.ArrayStoreException异常…

    C 2023年5月22日
    00
  • 一篇文章带你入门C语言:操作符

    一篇文章带你入门C语言:操作符 简介 C语言作为一门被广泛应用的高级编程语言,掌握其基本操作符的使用是进行编程的重要基础。本文将系统介绍C语言中常用的操作符及其用法,通过例子的讲解,帮助初学者快速入门。 算术操作符 算术操作符主要包括加减乘除运算,其中加、减运算符直接用“+”和“-”表示,乘、除运算符则分别用“*”和“/”表示。 示例1:计算两个数的加法和乘…

    C 2023年5月23日
    00
  • C++解析特殊符号tab、换行符号实例代码

    好的。 C++解析特殊符号tab、换行符号实例代码 1. tab符号解析 Tab符号的特殊字符是\t,表示在一个字符串中加入Tab空格。 下面是一个例子,演示如何在C++中使用\t来生成Tab: #include <iostream> int main() { std::cout << "Name:\tJohn" …

    C 2023年5月24日
    00
  • Python实现打砖块小游戏代码实例

    Python实现打砖块小游戏代码实例 1. 简介 本文将介绍如何使用Python编写一个简单的打砖块小游戏代码,该代码使用Pygame库实现。 2. 环境搭建 在开始编写代码之前,我们需要安装Pygame库。这可以通过以下命令在终端中执行来安装: pip install pygame 3. 初始化 我们首先需要导入所需的库和模块,例如: import sys…

    C 2023年5月22日
    00
  • 利用C语言实现猜数字小游戏

    下面是利用C语言实现猜数字小游戏的完整攻略: 步骤一:程序基本结构的搭建 我们可以先编写一个基本的程序框架,包含头文件、全局变量、函数声明等部分。具体代码如下: #include <stdio.h> #include <stdlib.h> #include <time.h> int secret_number; // 定义…

    C 2023年5月23日
    00
  • C语言与C++项目实现相互调用

    C语言与C++项目实现相互调用 前言 C语言和C++是程序员们在开发过程中经常使用的编程语言,两种语言有着相似的语法以及基础概念,但是在细节方面却存在较大的差异。由于C++是在C语言基础上的扩展,因此,C语言与C++的项目实现相互调用是可行的。 在本文中,我们将详细介绍如何在C语言项目和C++项目之间实现相互调用,并提供两个示例来说明该过程。 准备工作 在开…

    C 2023年5月23日
    00
  • C 头文件

    下面详细讲解一下 C 头文件的完整使用攻略。 什么是 C 头文件 在 C 语言中,头文件是一种特殊的文件,它包含了一些函数和变量的声明,可以被其他源文件引用。头文件的作用就是让代码更好维护和组织,可以将程序中的一些常用的函数和变量声明都放在头文件中,便于管理和使用。 如何使用 C 头文件 C 头文件通常包含两个部分:宏定义和函数声明。其中,宏定义是用来定义一…

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