【配置环境】SQLite数据库安装和编译以及VS下C++访问SQLite数据库
一,环境
- Windows 11 家庭中文版,64 位操作系统, 基于 x64 的处理器
- SQLite - 3.43.2
- Microsoft Visual Studio Community 2022 (64 位) - Current 版本 17.5.3
二,SQLite简介
简要介绍
- SQLite(Structured Query Language for Lite)是一种流行且广泛使用的嵌入式关系型数据库管理系统(RDBMS)。它以其简单性、小巧的特点和自包含性而著称,非常适合嵌入式系统、移动应用程序和轻量级桌面应用程序。
详细介绍
- 嵌入式数据库:SQLite是一种嵌入式数据库,意味着它作为一个库直接链接到应用程序中。与传统的客户端-服务器数据库(如MySQL或PostgreSQL)不同,SQLite没有独立的服务器进程。应用程序可以直接与SQLite数据库文件进行交互,而不需要额外的数据库服务器。
- 自包含性:SQLite数据库以单个文件的形式存储在磁盘上,这个文件包含了整个数据库的结构和数据。这使得SQLite数据库易于备份、传输和部署。
- 无服务器:没有需要设置或管理的独立服务器。应用程序直接与SQLite库通信,后者读取和写入数据库文件。
- 跨平台:SQLite可用于各种平台,包括Windows、macOS、Linux、iOS、Android等。这种跨平台兼容性使其适用于不同类型的应用程序。
- SQL支持:SQLite可在多种操作系统上运行,包括Windows、macOS、Linux、iOS、Android等,因此具有良好的跨平台兼容性。
- 事务支持:SQLite支持事务,这允许开发者在一组操作中进行原子性的数据库更新。如果一组操作中的任何一项失败,将自动回滚整个事务,确保数据库的一致性。
- ACID兼容性:SQLite是ACID(原子性、一致性、隔离性和持久性)兼容的数据库,这意味着它确保数据的完整性和一致性,即使在故障情况下也是如此。
- 轻量级:SQLite被设计为占用少量内存和磁盘空间,适用于资源有限的环境。
- 零配置:SQLite数据库无需复杂的配置过程。创建一个数据库文件,即可开始使用它。它不需要繁琐的安装或服务器设置。
- 高性能:虽然可能不如大型RDBMS对于极高的工作负载性能那么出色,但SQLite以其良好的性能而闻名,尤其适用于小到中等规模的数据库。
- 开源:SQLite是开源的,使用它不需要任何费用,且可以查看其源代码。这使得开发者可以更好地理解其工作原理并进行必要的自定义修改。
- 丰富的编程语言支持:SQLite可以与多种编程语言进行集成,包括但不限于C/C++、Python、Java、C#、PHP和Ruby。它提供了针对这些语言的API,使开发者能够轻松地与数据库交互。
三,SQLite安装
1.下载SQLite二进制文件
- 前往SQLite官方网站的下载页面:SQLite Download Page
- 在“Precompiled Binaries for Windows”部分中,会看到多个版本的SQLite二进制文件,选择适合的系统架构的版本。选择下载红框中的压缩文件(它是一组用于管理SQLite数据库文件的命令行工具)。
2.解压缩SQLite二进制文件
- 解压缩下载的文件,并将其中的文件复制到希望使用SQLite的目录或系统路径中。(例如,可以将其解压缩到D:\sqlite目录中)
- sqlite3.exe:
- 作用:
sqlite3.exe是 SQLite 的交互式命令行工具,它允许用户与 SQLite 数据库进行交互、执行 SQL 查询、管理数据库和表,以及进行各种数据库操作。- 详细介绍:
sqlite3.exe是一个命令行界面的工具,它允许用户打开 SQLite 数据库文件,并在命令行中执行 SQL 语句。可以使用它来创建数据库、创建表、插入数据、查询数据、更新数据、删除数据等等。它对于开发、测试和调试 SQLite 数据库非常有用,也可以用于执行数据库备份和还原操作。可以通过在命令行中运行sqlite3.exe并指定数据库文件来启动它,然后在交互式命令行中输入 SQL 命令。- sqldiff.exe:
- 作用:
sqldiff.exe是 SQLite 的数据库比较工具,用于比较两个 SQLite 数据库文件之间的结构和数据差异。- 详细介绍:
sqldiff.exe用于比较两个 SQLite 数据库文件,查找它们之间的差异,包括数据库结构(例如,表、列、索引等)和数据。这对于在不同环境中同步数据库、检测更改或合并数据库非常有用。sqldiff.exe生成一个 SQL 脚本,该脚本包含将一个数据库变更为另一个数据库的命令。可以使用该脚本来将一个数据库的更改应用到另一个数据库。- sqlite3_analyzer.exe:
- 作用:
sqlite3_analyzer.exe是 SQLite 的数据库性能分析工具,用于分析 SQLite 数据库文件的性能和结构。- 详细介绍:
sqlite3_analyzer.exe可用于检查 SQLite 数据库文件的结构和性能特征。它可以生成详细的报告,包括数据库的 B 树索引结构、页面使用情况、表的大小等等。这些信息对于优化数据库查询和性能调整非常有用。另外还可以用于评估数据库文件的大小和性能,以便在需要时采取相应的措施来改进数据库的性能。
- 如果要在任何位置使用SQLite命令行工具,需要将SQLite添加到系统环境变量中。
3.验证安装
- 打开命令提示符,然后执行 sqlite3 --version 命令来验证SQLite是否正确安装,如果安装成功会看到SQLite的版本信息。
四,SQLite命令行工具操作数据库
- 打开命令行终端,使用
cd命令导航到要存放数据库文件的目录,命令如下:
- cd E:\SQLite_project
- 然后使用以下命令创建一个新的SQLite数据库文件(例如,名为mydatabase.db),如果文件不存在,它将创建一个新的数据库文件。
- sqlite3 mydatabase.db
- 但这时不会在文件夹下显示刚刚创建的数据库文件,然后执行
.databases命令才会进行显示。- 在数据库中存储数据之前,需要创建一个或多个表来定义数据的结构。可以使用SQL命令来创建表。例如:
- CREATE TABLE users ( id INTEGER PRIMARY KEY, username TEXT, email TEXT );
- 使用INSERT语句将数据插入表中,例如:
- INSERT INTO users (username, email) VALUES ('zhangsan', 'zhangsan@example.com'), ('lisi', 'lisi@example.com');
- 使用SELECT语句从表中检索数据,例如:
- SELECT * FROM users;
- 使用UPDATE语句更新表中的数据,使用DELETE语句删除数据。
- UPDATE users SET email = 'zhang_san@example.com' WHERE username = 'zhangsan';
- DELETE FROM users WHERE username = 'zhangsan';
- 当完成与数据库的交互后,可以使用以下命令退出SQLite命令行工具:
- .exit
五,SQLite Expert可视化管理工具
- SQLite Expert 是一个用于管理和操作 SQLite 数据库的图形化用户界面 (GUI) 工具,可以从 SQLite Expert 官网 下载最新的免费安装文件。
- 下载完成并一路傻瓜式安装好后,界面显示如下,操作也非常简单。
六,获取SQLite3库文件的几种方式
一,使用Visual Studio的lib.exe工具获取SQLite3库
1.下载SQLite源文件和库文件
- 首先,需要下载SQLite的预编译二进制文件(dll文件)以及源码文件(SQLite Amalgamation文件,这是SQLite的C语言源代码文件),可以从SQLite官方网站 下载最新的版本。
- sqlite-amalgamation-3430200.zip 文件解压后文件内容如下,是不是非常轻便简洁。
- sqlite-dll-win64-x64-3430200.zip 解压缩后包含SQLite数据库引擎的核心库,通常以DLL(动态链接库)的形式提供。这个库文件是用来在应用程序中访问和操作SQLite数据库的。在平时开发中,需要将这个库文件与应用程序一起使用,以便应用程序能够连接到SQLite数据库。
sqlite3.dll是SQLite数据库引擎的二进制库,允许动态加载SQLite数据库引擎,而sqlite3.def文件定义了sqlite3.dll中可供外部程序访问的函数和符号列表,以便其他程序可以在编译时正确链接到SQLite库。- 把这些解压缩后的文件整理一下,以下是我的存放方式,统一放在 D:\sqlite 路径下。
- D:\sqlite 目录下文件存放方式如下:
- D:\sqlite\include 目录存放 sqlite-amalgamation-3430200.zip 解压后的文件。
- D:\sqlite\lib\x64 目录存放 sqlite-dll-win64-x64-3430200.zip 解压后的文件。
- D:\sqlite\lib\x86 目录存放 sqlite-dll-win32-x86-3430200.zip 解压后的文件。
2.编译SQLite3源码得到sqlite3.lib静态库
- 找到 Visual Studio 安装目录下的 lib.exe 工具路径,将该路径添加到系统环境变量中:(系统架构为64位选Hostx64目录,32位选Hostx86目录)
- D:\Program Files\Visual Studio 2022\VC\Tools\MSVC\14.35.32215\bin\Hostx64\x64
- 上述路径表示 Visual Studio 2022 中的编译工具链是为在 64 位 Windows 操作系统上构建 64 位应用程序和库而设计的。这使我们能够使用 Visual Studio 来开发和构建适用于 64 位环境的软件。(其它路径同理)
- 在上面的 D:\sqlite\x64 路径下打开终端,执行命令:LIB /MACHINE:X64 /DEF:sqlite3.def
- /MACHINE:X64:指定生成的库文件将用于 64 位体系结构,即 x64 架构。
- /DEF:sqlite3.def:指定用于生成库文件的定义文件(.def文件)。.def 文件通常包含了库文件的导出函数和符号信息。(通过def和dll文件生成lib文件)
- 然后会生成sqlite3.exp和sqlite3.lib两个文件。
- 切换到 D:\sqlite\lib\x86 路径下并打开终端执行命令:LIB /MACHINE:X86 /DEF:sqlite3.def,将会生成用于32位的库文件。
3.lib.exe工具的作用(番外)
lib.exe是 Microsoft Visual Studio 中的库工具,它的主要用途是用于创建、管理和处理静态链接库(Static Link Library,.lib 文件)。lib.exe具有以下主要功能和用途:
- 创建静态链接库:
lib.exe可用于将多个目标文件(通常是 .obj 文件)合并成一个静态链接库文件,以便在编译和链接应用程序时使用。- 添加和删除目标文件:可以使用
lib.exe向现有的库文件中添加新的目标文件,也可以从库文件中删除不再需要的目标文件。- 生成导入库:
lib.exe通常用于生成库文件的导入版本(import library),以便在应用程序编译时链接到动态链接库(.dll 文件)。- 列出库文件内容:可以使用
lib.exe来列出库文件中包含的目标文件和符号信息。- 更新库文件:如果库中的一个或多个目标文件已被更新,可以使用
lib.exe来重新构建库文件,以确保它包含最新的目标文件。
二,使用vcpkg获取SQLite3库
- 安装vcpkg(如果尚未安装),参照 vcpkg安装和使用教程 文章。
- 安装SQLite3库命令如下,安装到vcpkg/packages目录下。
- 安装32位的SQLite3库:vcpkg install sqlite3
- 安装64位的SQLite3库:vcpkg install sqlite3:x64-windows
- 若不想配置项目属性,就执行该命令集成到项目中:vcpkg integrate install
- 然后用VS创建C++项目,编写C++代码,此步骤和前面一样就行。
七,Visual Studio下C++访问SQLite数据库
1.创建C++项目
- 打开Visual Studio并创建一个新的C++空项目。
2.添加SQLite库和头文件
将下载的SQLite头文件复制到项目目录中。- 在Visual Studio中,右键单击项目,选择“属性”打开属性窗口。
- 在属性窗口中,展开“VC++ 目录 > 常规”,然后将SQLite头文件的目录路径添加到“外部包含目录”中。(D:\sqlite\include)
- 在属性窗口中,展开 “VC++ 目录 > 常规”,然后将SQLite的dll文件所在的目录路径添加到 “库目录” 中。(D:\sqlite\lib\x64)
- 如果库目录是D:\sqlite\lib\x64就在当前工程目录下添加 D:\sqlite\lib\x64 目录下的sqlite3.dll文件。
- 如果库目录是D:\sqlite\lib\x86就在当前工程目录下添加 D:\sqlite\lib\x86 目录下的sqlite3.dll文件。
- 在属性窗口中,展开“链接器 > 输入”,然后将SQLite的库文件(通常是sqlite3.dll)添加到“附加依赖项”中。
3.编写C++代码
#include <iostream> #include "sqlite3.h"#pragma comment(lib,"sqlite3.lib")int main() {// 打开或创建数据库文件sqlite3* db;const char* path = "E:\\SQLite_Project\\mydatabase.db";int rc = sqlite3_open(path, &db);if (rc != SQLITE_OK){std::cerr << "无法打开数据库: " << sqlite3_errmsg(db) << std::endl;return rc;}else{std::cout << "成功打开数据库." << std::endl;}// 在这里执行与数据库的交互操作,例如执行SQL查询sqlite3_close(db);return 0; }4.运行效果
相关文章:
【配置环境】SQLite数据库安装和编译以及VS下C++访问SQLite数据库
一,环境 Windows 11 家庭中文版,64 位操作系统, 基于 x64 的处理器SQLite - 3.43.2Microsoft Visual Studio Community 2022 (64 位) - Current 版本 17.5.3 二,SQLite简介 简要介绍 SQLite(Structured Query Language for Lite&a…...
Confluence 自定义展示页面
1. 概述 Confluence 作为知识库可通过JS脚本方式,根据登录用户或用户组进行前端页面的自定义 2. 实现方式 Confluence →管理→自定义HTML 嵌入对应JS脚本,示例如下 <script type"text/javascript">jQuery(#footer).html(<div>…...
使用C#的Socket从头实现的带有文件上传和下载功能的HTTP服务器
使用C#和Socket从头实现的带有文件上传和下载功能的HTTP服务器。它支持GET、POST请求方法,并能处理URL参数、请求体以及文件上传和下载。 using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Text;class HttpServer {publi…...
【OSPF Loading、FULL状态与display ospf peer brief命令、OSPF的数据库讲解】
个人名片: 🐼作者简介:一名大二在校生,喜欢编程🎋 🐻❄️个人主页🥇:落. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️ 零基…...
除氟树脂在工业、市政含氟废水处理中的应用
含氟废水的不达标排放对自然环境有很大的危害,氟化物离子可以累积在土壤和水体中,从而对生态系统造成破坏。大量的氟化物离子会对植物生长产生不良影响,并对水生生物造成毒性作用,严重时还可能导致生态灾难。氟化物离子如果没有得…...
模拟地和数字地的区别
模拟地和数字地的主要区别体现在设计目的、处理技术、数据类型和数据精度四个方面。 设计目的:模拟地的主要设计目的是分析时空数据、进行模型和预测,它主要关注动态变化和过程。而数字地的主要设计目的是数据的存储、管理、查询和分析,在地…...
Druid连接池最小连接数设置失效问题
问题发现: 配置 当项目启动后 线程池确实是初始化了5条连接,但是当项目运行一段时间后,5条连接确消失了,只会程序用到得时候,再去初始化连接,这样有点违背了参数设置得意义,后来通过查阅资料发…...
Javascript数据类型和类型转换
Javascript数据类型和类型转换 在JavaScript中,理解数据类型,如何区分它们,以及它们如何被转换是至关重要的。在这篇文章中,我们将探讨这些主题,以帮助巩固你的JavaScript基础。 基础数据类型和引用数据类型 当涉及…...
冲刺十五届蓝桥杯P0005单词分析
文章目录 题目分析代码 题目 单词分析 分析 统计字符串中字母出现的次数,可以采用哈希表,代码采用的是数组来存储字符,将字符-97,得到对应的数组下标,将对应下标的数组;找到数组元素最大的下标ÿ…...
php获取10年内的年份并加入下拉列表
要实现的效果 在html中内嵌php循环将数组中的年份加入下拉列表 <div class="form-group"><label>年份:</label><div class="input-group"><div class="input-group-prepend"><span class="input-group-te…...
2020年亚太杯APMCM数学建模大赛B题美国总统的经济影响分析求解全过程文档及程序
2020年亚太杯APMCM数学建模大赛 B题 美国总统的经济影响分析 原题再现: 美国总统选举每四年举行一次。 2020年是美国总统大选年,共和党候选人唐纳德特朗普和民主党对手乔拜登竞选总统。 甲乙双方候选人在金融贸易,经济金融治理,…...
保护隐私就是在保护自己!如何在Android上更改应用程序权限
如果你关心隐私,知道如何在Android上更改应用程序权限将成为一项非常重要的技能。即使是最好的安卓应用程序也可以对手机的功能和数据进行广泛的访问,因此准确控制它们的使用范围会有所帮助。 一旦你在手机上加载了应用程序,你可能会注意到它…...
Linux/Ubuntu 安装 Java运行环境
linux下安装Java运行环境 1、下载安装包 .tar.gz 先在官网下载 JDK 点击这里 在这里要选择对应的 JDK 版本,一般我们目前选择JDK8 点击这里 2、在 /usr/local/ 目录下创建Java文件夹 cd /usr/local/ mkdir java3、将下载的文件通过FTP程序上传到刚刚创建的Java文…...
vue2 中activated和deactivated是详细解说
activated 和 deactivated 是 Vue.js 中的生命周期钩子函数,主要用于处理组件在 keep-alive 缓存中进入和离开时的行为。 这些钩子函数通常用于在组件进入缓存时执行特定的操作,以及在组件离开缓存时执行清理操作。 下面是关于这两个钩子函数的用例和示例…...
C# GFPGAN 图像(人脸面部)修复
效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {pu…...
ruoyi项目登录验证变更
背景:我用的是ruoyi-vue3.8.6版本,因公司需要使用window的域用户进行登录验证,因此原有的ruoyi登录验证方法就得替换掉 1. 首先登录系统添加一些域账号,以确保登录方式更改后,能在sys_user中找到该账号,因…...
maven依赖冲突以及解决方法
什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突 依赖冲突的原因 依赖冲突很经常是类包之间的间接依赖引起的。每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会被maven间接引…...
K8S常用的一些命令及工具
已json格式输出 [rootk8master1 ~]# yum install epel-release [rootk8master1 ~]# yum -y install jq [rootk8master1 ~]# kubectl get --raw /api/v1/namespaces/dev | jq {"kind": "Namespace","apiVersion": "v1","metadata…...
Atlas 200I DK目标检测与追踪技术记录
数据集 数据集采用MOT系列,MOT是多目标追踪常用数据集,MOT数据集对数据集进行了分帧,如要获得视频,需要先利用opencv里的cv2.VideoWriter模块便利图片文件夹,具体代码如下: import os import cv2img_path…...
php如何在header增加key,sign,timestamp?怎么鉴权?
在PHP中,您可以通过在HTTP请求的Header中增加Key、Sign和Timestamp等信息来进行安全性鉴权。 以下是一种基本的思路和示例,用于说明如何实现这种鉴权机制: 生成Key和Sign: 服务端和客户端之间共享一个密钥(Key&#x…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...












