C++实现sqlite单表增删改查的详细步骤

1.环境准备

coding之前需要先安装好C++的集成开发环境, 我这里选择的是Visual Studio 2022,本来想使用CLion的, 但是破解太麻烦,懒得整了。

  • Visual Studio 2022

2.项目创建及编码

启动visual studio, 点击创建项目,选择“空项目”
在这里插入图片描述
配置项目名称和项目工作目录以及解决方案名称,之后, 点击“创建”即可创建一个C++空项目。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY,name TEXT,age INTEGER,gender TEXT,class_no TEXT,grade_no TEXT,nation TEXT
);

代码实现

#include <sqlite3.h>
#include <iostream>
#include <vector>
#include <string>const char* DB_FILE_PATH = "D:/commonTools/sqliteDB/student.db";class DatabaseManager {
public:DatabaseManager() {int result = sqlite3_open(DB_FILE_PATH, &db_);if (result != SQLITE_OK) {std::cerr << "Failed to open database." << std::endl;}}~DatabaseManager() {sqlite3_close(db_);}int executeSQL(const std::string& sql) {char* errMsg = nullptr;int result = sqlite3_exec(db_, sql.c_str(), nullptr, nullptr, &errMsg);if (result != SQLITE_OK) {std::cerr << "SQL error: " << errMsg << std::endl;sqlite3_free(errMsg);}return result;}sqlite3* getDB() {return db_;}private:sqlite3* db_;
};class Student {
public:Student(DatabaseManager& dbManager): dbManager_(dbManager) {}void createTable() {const std::string sql = "CREATE TABLE IF NOT EXISTS t_student (""id INTEGER PRIMARY KEY,""name TEXT,""age INTEGER,""gender TEXT,""class_no TEXT,""grade_no TEXT,""nation TEXT"");";int result = dbManager_.executeSQL(sql);if (result != SQLITE_OK) {std::cerr << "Failed to create table." << std::endl;}}bool addStudent(const std::string& name, int age, const std::string& gender, const std::string& classNo, const std::string& gradeNo, const std::string& nation) {std::string sql = "INSERT INTO t_student (name, age, gender, class_no, grade_no, nation) VALUES ('" + name + "', " + std::to_string(age) + ", '" + gender + "', '" + classNo + "', '" + gradeNo + "', '" + nation + "');";int result = dbManager_.executeSQL(sql);return (result == SQLITE_OK);}bool deleteStudent(int id) {std::string sql = "DELETE FROM t_student WHERE id = " + std::to_string(id) + ";";int result = dbManager_.executeSQL(sql);return (result == SQLITE_OK);}bool updateStudent(int id, const std::string& name, int age, const std::string& gender, const std::string& classNo, const std::string& gradeNo, const std::string& nation) {std::string sql = "UPDATE t_student SET name = '" + name + "', age = " + std::to_string(age) + ", gender = '" + gender + "', class_no = '" + classNo + "', grade_no = '" + gradeNo + "', nation = '" + nation + "' WHERE id = " + std::to_string(id) + ";";int result = dbManager_.executeSQL(sql);return (result == SQLITE_OK);}std::vector<std::vector<std::string>> getAllStudents() {std::vector<std::vector<std::string>> students;std::string sql = "SELECT * FROM t_student;";sqlite3_stmt* statement;if (sqlite3_prepare_v2(dbManager_.getDB(), sql.c_str(), -1, &statement, nullptr) == SQLITE_OK) {while (sqlite3_step(statement) == SQLITE_ROW) {std::vector<std::string> studentData;int columnCount = sqlite3_column_count(statement);for (int i = 0; i < columnCount; ++i) {const unsigned char* columnText = sqlite3_column_text(statement, i);if (columnText) {studentData.push_back(reinterpret_cast<const char*>(columnText));}else {studentData.push_back("");}}students.push_back(studentData);}sqlite3_finalize(statement);}else {std::cerr << "Failed to execute SQL statement: " << sql << std::endl;}return students;}private:DatabaseManager& dbManager_;
};int main() {// 创建数据库管理器对象DatabaseManager dbManager;// 创建学生对象Student student(dbManager);// 如果表不存在,先创建表student.createTable();// 添加学生student.addStudent("zhangsan", 20, "Female", "2301", "大一", "中国");// 更新学生信息student.updateStudent(1, "hanmeimei", 22, "Male", "2203", "大二", "中国");// 查询所有学生信息std::vector<std::vector<std::string>> allStudents = student.getAllStudents();for (const auto& studentData : allStudents) {for (const auto& value : studentData) {std::cout << value << " ";}std::cout << std::endl;}// 删除学生// student.deleteStudent(1);std::cin.get();return 0;
}

在这里插入图片描述
上面代码写完之后,IDE中关于sqlite数据哭的操作会出现大量的错误提示,这里是因为没有在项目中引入sqlite3的相关库文件导致的问题, 下面详细说说怎么怎么把sqlite3的库文件引入到当前项目中。

3.下载sqlite3相关库

下载地址:https://www.sqlite.org/download.html
需要下载的文件:

源码包:https://www.sqlite.org/2023/sqlite-amalgamation-3420000.zip

预编译二进制文件:https://www.sqlite.org/2023/sqlite-dll-win64-x64-3420000.zip
在这里插入图片描述

4.生成sqlite3.lib库文件

解压这两个包
在这里插入图片描述将解压后的文件都拷贝到一个目录中,目录暂且命名为sqlitelib
在这里插入图片描述
通过visual Studio安装目录下的lib.exe对sqlitelib目录进行编译生成sqlite.lib文件

一般lib.exe的所在目录就是[安装目录]\VisualStudio\2022\Community\VC\Tools\MSVC\14.36.32532\bin\Hostx64\,我这里自定义了安装目录,如果是默认安装,应该就在C盘下, 如果不知道目录在哪里,就找到启动的快捷方式, 鼠标右键,有一个“打开文件在目录”就可以找到安装目录了。
在这里插入图片描述
特别提示:在进行sqlite.lib文件的生成的时候, 如果你是32位的系统, 请使用[安装目录]\VisualStudio\2022\Community\VC\Tools\MSVC\14.36.32532\bin\Hostx86\x86目录下的lib.exe,

  • 如果是64位的操作系统:

lib.exe /out:D:\commonTools\CPPExtensions\sqlitelib\sqlite3.lib /DEF:D:\commonTools\CPPExtensions\sqlitelib\sqlite3.def
  • 如果是32位的操作系统:

lib.exe /out:D:\commonTools\CPPExtensions\sqlitelib\sqlite3.lib /MACHINE:IX86 /DEF:D:\commonTools\CPPExtensions\sqlitelib\sqlite3.def

编译成功之后会在sqlitelib目录下生成两个文件sqlite3.libsqlite3.exp.如下图所示:
在这里插入图片描述

拷贝sqlite3.dllC:\Windows\System32目录下,运行时需要这个动态库,反正照做就对了。
在这里插入图片描述

5.引入sqlite3.lib库文件到项目

【项目】-右键-【属性】
在这里插入图片描述

5.1.附加包含目录设置

【C/C++】-【常规】-【附加包含目录】
在这里插入图片描述
选择我们刚刚使用lib.exe编译生成sqlite.lib文件所在的目录sqlitelib(注意这里只需要选择到sqlite.lib文件所在的目录即可)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2.附加库目录设置

【链接器】-【常规】-【附加库目录】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择我们刚刚使用lib.exe编译生成sqlite.lib文件所在的目录sqlitelib(注意这里只需要选择到sqlite.lib文件所在的目录即可)
在这里插入图片描述
点击【确定】
在这里插入图片描述

5.3.附加依赖项设置

【链接器】-【输入】-【附加依赖项】
在这里插入图片描述
在这里插入图片描述

选择我们刚刚使用lib.exe编译生成sqlite3.lib文件(注意这里需要将sqlite3.lib文件的绝对路径配置到这里)
在这里插入图片描述
在这里插入图片描述

最后点击【应用】并【确定】保存设置修改。
在这里插入图片描述
再打开项目,发现跟sqlite相关的语法报错都没有了。运行调试测试一下
在这里插入图片描述
调试成功,数据库操作成功了。
在这里插入图片描述

链接数据库看看数据, 发现数据也成功写入了, 中文乱码是因为编码的问题, 这里设置一下编码就行了,也很简单。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/255881.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

环境变量设置export 命令详解

环境变量通俗来讲&#xff0c;就是指定一个路径&#xff0c;编译工具或运行软件时&#xff0c;任务进程会按照设置的路径来搜索文件或使用工具。如果不设置环境变量&#xff0c;又想使用该条命令&#xff0c;则需要加上绝对路径&#xff0c;否则我们需要把文件复制到系统标准命…

centos7环境变量设置

目录 一、 环境变量概念 1、环境变量的含义 2、环境变量的分类 3、Linux环境变量 二、常用的环境变量 1、查看环境变量 1&#xff09;env命令&#xff1a;查看当前用户全部的环境变量。 2&#xff09;echo命令&#xff1a;查看当前用户全部的环境变量&#xff0c;符号$不…

chatgpt赋能python:Python中调换数据位置的方法

Python中调换数据位置的方法 在Python编程中&#xff0c;我们经常需要操作数据的位置&#xff0c;例如调换数组中的元素顺序、交换多个变量的值等。在本篇文章中&#xff0c;我们将介绍Python中调换数据位置的常用方法&#xff0c;并给出相应的代码示例。 1.使用临时变量交换…

jenkins —— pipeline基础语法与示例

一、Jenkins介绍 二、Jenkins Pipeline介绍 Jenkins Pipeline总体介绍 1.Pipeline 是Jenkins 2.X核心特性&#xff0c;帮助Jenkins实现从CI到CD与DevOps的转变 2.Pipeline 简而言之&#xff0c;就是一套运行于Jenkins上的工作流框架&#xff0c;将原本独立 运行于单个或者多个…

SpringBoot调阿里云人脸识别人脸对比接口

开发工具&#xff1a;IDEA2019.3 开发框架&#xff1a;SpringBoot2.2 数据库&#xff1a;Mysql 接口测试工具:swagger 阿里云demo如下 和我之前调OCR身份证识别类似&#xff0c;也有StringUtils工具类&#xff0c;和一些依赖&#xff0c;这个是需要的依赖 <?xml version…

Python 基于OpenCV+face_recognition实现人脸捕捉与人脸识别(照片对比)

1.安装包依赖 与上篇通过摄像头动态识别人脸一样&#xff0c;先下载好opencv-python、face-recognition&#xff0c;这里因为使用的是照片对比的方式&#xff0c;特意使用tkinter画了一个简单的GUI方便操作。 在python 3以上版本tkinter是环境自带的&#xff0c;所以这里不需…

使用百度AI接口进行人脸对比(Python SDK V3版本实现)

一.安装人脸识别 Python SDK 首先在当前的python环境中使用pip install baidu-aip安装人脸识别 Python SDK。 二.算法思路 1.首先通过python SDK中的AipFace类获取一个客户端对象。 from aip import AipFace""" 你的APPID&#xff0c;API_KEY和SECRET_KEY &q…

测试相貌相似度的软件,快乐相似脸 - 测试你们之间的长相相似度

快乐相似脸 - 测试你们之间的长相相似度 介绍 快乐相似脸 - 测试你们之间的长相相似度 快乐相似脸是一款用于测试两个人头像相似度的恶搞软件&#xff0c;无论你们是好朋友、基友、情侣或者拉拉&#xff0c;测一下你们俩到底长得像不像吧&#xff0c;看看你们缘分如何&#xff…

图像相似度对比分析软件,图像相似度对比分析法

有什么可以对比两张图片得出相似度的软件。 谷歌人工智能写作项目&#xff1a;神经网络伪原创 图像怎么进行比对 有什么软件可以把两张照片进行对比 查看相似度 1、Mix滤镜大师。IX滤镜大师免费提供将近200款默认滤镜&#xff0c;包括景深滤镜&#xff0c;散景滤镜&#xff…

华为OD机试真题B卷 Java 实现【Linux 发行版的数量】,附详细解题思路

一、题目描述 Linux 操作系统有多个发行版&#xff0c;distrowatch.com 提供了各个发行版的资料。这些发行版互相存在关联&#xff0c;例如 Ubuntu 基于 Debian 只开发而 Mint 又基于 Ubuntu 开发&#xff0c;那么我们认为 Mint 同 Debian 也存在关联。 发行版集是一个或多个…

wrs-arcface虹软人脸识别

前言 虹软人脸识别组件&#xff0c;支持活体识别、离线识别、图片人脸特征识别、图片是否同一人对比、相机人脸识别或对比,虹软免费版请使用这个插件https://ext.dcloud.net.cn/plugin?id6084 虹软SDK版本号&#xff1a; Android:V3.0 ios:V3.0 功能 支持活体识别、离线识…

使用讯飞人脸对比API

参考官方文档&#xff1a; 讯飞人脸对比Web API文档 附加文档&#xff1a;错误码查询 运行前&#xff1a;请先填写appid、apisecret、apikey以及图片路径 appid、apisecret、apikey在控制台创建新应用后获取 from datetime import datetime from wsgiref.handlers import forma…

PHP 调用百度人脸对比

本文章主要介绍人脸对比API能力、应用场景、请求实例、参数说明。 接口能力 两张人脸图片相似度对比&#xff1a;比对两张图片中人脸的相似度&#xff0c;并返回相似度分值。 多种图片类型&#xff1a;支持生活照、证件照、身份证芯片照、带网纹照四种类型的人脸对比。 活体检测…

人脸识别,人脸对比技术及案例实现方案

人脸识别&#xff0c;人脸对比技术及案例实现方案 一、各个人脸识别公司、系统简介1.1 虹软1.2 Face旷视1.3 云脉1.4 腾讯AI1.5 1MB轻量级人脸检测模型1.6 SeetaFace-科院计算机所开源项目 二、基于虹软的Java人脸识别2.1 人脸识别SDK2.2 Java项目搭建2.2.1 下载Demo项目2.2.2 …

【百度AI_人脸识别】图片对比相似度、人脸对比登录(调摄像头)

人脸对比 此文档功能&#xff1a; 两张人脸图片相似度对比&#xff1a;比对两张图片中人脸的相似度&#xff0c;并返回相似度分值。存档一张图片与调用的摄像中的人脸进行对比。项目、资源下载&#xff1a;https://download.csdn.net/download/m0_70083523/87150842?spm1001.2…

Missing-Semester Lec1 Solution

操作系统&#xff1a; m a c O S M o n t e r e y v e r s i o n 12.6 macOS \ Monterey version \ 12.6 macOS Montereyversion 12.6 1、查看shell是否符合要求 echo $SHELL /bin/zsh2、在/tmp下新建一个名为missing的文件夹 mkdir missing3、用man查看程序touch的使用手册…

怎么做自媒体,这份入门攻略,建议收藏

1. 选择合适的平台 现在的自媒体平台非常多&#xff0c;有短视频平台、长视频平台、图文平台等&#xff0c;你可以依照自己的喜好去选择&#xff0c;不过要尽量选择用户量大一些的&#xff0c;也可以直接多个平台分发。 2. 确定领域 这是很关键的一步&#xff0c;你要选择你擅…

零基础使用ChatGPT写一个小游戏---文末附源码

ChatGPT&#xff1a;赋能自然语言处理的多种应用领域 ChatGPT是当今最先进的人工智能对话系统之一&#xff0c;已经被证明可以支持许多不同的自然语言处理应用程序。以下是ChatGPT可以运行的几个领域&#xff1a; 聊天机器人 ChatGPT作为一个建立在自然语言处理技术上的人工…

你是不是想做影视剪辑奈何不会写文案?我来帮你搞定文案

影视剪辑的本质就是我们进行一系列的主题动作分解组合&#xff0c;完成蒙太奇形象的塑造&#xff0c;影视剪辑主要分为几个步骤&#xff1a; 第一&#xff1a;视频素材准备 第二&#xff1a;文案素材准备 第三&#xff1a;确定剪辑方案 第四&#xff1a;剪辑手段选择 第五&…

短视频平台上亿用户都听过的声音|盘点三款超级好用的配音工具(内附教程哦~)

“这个女人叫小美”“这个男人叫小帅” 是不是很神奇&#xff0c;明明只是文字&#xff0c;耳朵却仿佛听到了声音&#xff0c;脑海里甚至浮现出了画面&#xff01;现在很多网上爆火的影视解说&#xff0c;都在用这一套文案话术&#xff0c;并且都配上了或声音厚实有磁性&#…