【配置环境】SQLite数据库安装和编译以及VS下C++访问SQLite数据库

news2025/7/16 4:36:15

一,环境

  • 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)。它以其简单性、小巧的特点和自包含性而著称,非常适合嵌入式系统、移动应用程序和轻量级桌面应用程序。

详细介绍

  1. 嵌入式数据库:SQLite是一种嵌入式数据库,意味着它作为一个库直接链接到应用程序中。与传统的客户端-服务器数据库(如MySQL或PostgreSQL)不同,SQLite没有独立的服务器进程。应用程序可以直接与SQLite数据库文件进行交互,而不需要额外的数据库服务器。
  2. 自包含性:SQLite数据库以单个文件的形式存储在磁盘上,这个文件包含了整个数据库的结构和数据。这使得SQLite数据库易于备份、传输和部署。
  3. 无服务器:没有需要设置或管理的独立服务器。应用程序直接与SQLite库通信,后者读取和写入数据库文件。
  4. 跨平台:SQLite可用于各种平台,包括Windows、macOS、Linux、iOS、Android等。这种跨平台兼容性使其适用于不同类型的应用程序。
  5. SQL支持:SQLite可在多种操作系统上运行,包括Windows、macOS、Linux、iOS、Android等,因此具有良好的跨平台兼容性。
  6. 事务支持:SQLite支持事务,这允许开发者在一组操作中进行原子性的数据库更新。如果一组操作中的任何一项失败,将自动回滚整个事务,确保数据库的一致性。
  7. ACID兼容性:SQLite是ACID(原子性、一致性、隔离性和持久性)兼容的数据库,这意味着它确保数据的完整性和一致性,即使在故障情况下也是如此。
  8. 轻量级:SQLite被设计为占用少量内存和磁盘空间,适用于资源有限的环境。
  9. 零配置:SQLite数据库无需复杂的配置过程。创建一个数据库文件,即可开始使用它。它不需要繁琐的安装或服务器设置。
  10. 高性能:虽然可能不如大型RDBMS对于极高的工作负载性能那么出色,但SQLite以其良好的性能而闻名,尤其适用于小到中等规模的数据库。
  11. 开源:SQLite是开源的,使用它不需要任何费用,且可以查看其源代码。这使得开发者可以更好地理解其工作原理并进行必要的自定义修改。
  12. 丰富的编程语言支持:SQLite可以与多种编程语言进行集成,包括但不限于C/C++、Python、Java、C#、PHP和Ruby。它提供了针对这些语言的API,使开发者能够轻松地与数据库交互。

三,SQLite安装

1.下载SQLite二进制文件

  1. 前往SQLite官方网站的下载页面:SQLite Download Page
  2. 在“Precompiled Binaries for Windows”部分中,会看到多个版本的SQLite二进制文件,选择适合的系统架构的版本。选择下载红框中的压缩文件(它是一组用于管理SQLite数据库文件的命令行工具)。

2.解压缩SQLite二进制文件

  1. 解压缩下载的文件,并将其中的文件复制到希望使用SQLite的目录或系统路径中。(例如,可以将其解压缩到D:\sqlite目录中)
    1. sqlite3.exe:
      1. 作用sqlite3.exe 是 SQLite 的交互式命令行工具,它允许用户与 SQLite 数据库进行交互、执行 SQL 查询、管理数据库和表,以及进行各种数据库操作。
      2. 详细介绍sqlite3.exe 是一个命令行界面的工具,它允许用户打开 SQLite 数据库文件,并在命令行中执行 SQL 语句。可以使用它来创建数据库、创建表、插入数据、查询数据、更新数据、删除数据等等。它对于开发、测试和调试 SQLite 数据库非常有用,也可以用于执行数据库备份和还原操作。可以通过在命令行中运行 sqlite3.exe 并指定数据库文件来启动它,然后在交互式命令行中输入 SQL 命令。
    2. sqldiff.exe:
      1. 作用sqldiff.exe 是 SQLite 的数据库比较工具,用于比较两个 SQLite 数据库文件之间的结构和数据差异。
      2. 详细介绍sqldiff.exe 用于比较两个 SQLite 数据库文件,查找它们之间的差异,包括数据库结构(例如,表、列、索引等)和数据。这对于在不同环境中同步数据库、检测更改或合并数据库非常有用。sqldiff.exe 生成一个 SQL 脚本,该脚本包含将一个数据库变更为另一个数据库的命令。可以使用该脚本来将一个数据库的更改应用到另一个数据库。
    3. sqlite3_analyzer.exe:
      1. 作用sqlite3_analyzer.exe 是 SQLite 的数据库性能分析工具,用于分析 SQLite 数据库文件的性能和结构。
      2. 详细介绍sqlite3_analyzer.exe 可用于检查 SQLite 数据库文件的结构和性能特征。它可以生成详细的报告,包括数据库的 B 树索引结构、页面使用情况、表的大小等等。这些信息对于优化数据库查询和性能调整非常有用。另外还可以用于评估数据库文件的大小和性能,以便在需要时采取相应的措施来改进数据库的性能。
  1. 如果要在任何位置使用SQLite命令行工具,需要将SQLite添加到系统环境变量中。

3.验证安装

  1. 打开命令提示符,然后执行 sqlite3 --version 命令来验证SQLite是否正确安装,如果安装成功会看到SQLite的版本信息。

四,SQLite命令行工具操作数据库

  1. 打开命令行终端,使用cd命令导航到要存放数据库文件的目录,命令如下:
    1. cd E:\SQLite_project
  2. 然后使用以下命令创建一个新的SQLite数据库文件(例如,名为mydatabase.db),如果文件不存在,它将创建一个新的数据库文件。
    1. sqlite3 mydatabase.db
  3. 但这时不会在文件夹下显示刚刚创建的数据库文件,然后执行 .databases 命令才会进行显示。
  4. 在数据库中存储数据之前,需要创建一个或多个表来定义数据的结构。可以使用SQL命令来创建表。例如:
    1. CREATE TABLE users ( id INTEGER PRIMARY KEY, username TEXT, email TEXT );
  5. 使用INSERT语句将数据插入表中,例如:
    1. INSERT INTO users (username, email) VALUES ('zhangsan', 'zhangsan@example.com'), ('lisi', 'lisi@example.com');
  6. 使用SELECT语句从表中检索数据,例如:
    1. SELECT * FROM users;
  7. 使用UPDATE语句更新表中的数据,使用DELETE语句删除数据。
    1. UPDATE users SET email = 'zhang_san@example.com' WHERE username = 'zhangsan';
    2. DELETE FROM users WHERE username = 'zhangsan';
  8. 当完成与数据库的交互后,可以使用以下命令退出SQLite命令行工具:
    1. .exit

五,SQLite Expert可视化管理工具

  • SQLite Expert 是一个用于管理和操作 SQLite 数据库的图形化用户界面 (GUI) 工具,可以从 SQLite Expert 官网 下载最新的免费安装文件。
  • 下载完成并一路傻瓜式安装好后,界面显示如下,操作也非常简单。

六,获取SQLite3库文件的几种方式

一,使用Visual Studio的lib.exe工具获取SQLite3库

1.下载SQLite源文件和库文件

  1. 首先,需要下载SQLite的预编译二进制文件(dll文件)以及源码文件(SQLite Amalgamation文件,这是SQLite的C语言源代码文件),可以从SQLite官方网站 下载最新的版本。
  2. sqlite-amalgamation-3430200.zip 文件解压后文件内容如下,是不是非常轻便简洁。
  3. sqlite-dll-win64-x64-3430200.zip 解压缩后包含SQLite数据库引擎的核心库,通常以DLL(动态链接库)的形式提供。这个库文件是用来在应用程序中访问和操作SQLite数据库的。在平时开发中,需要将这个库文件与应用程序一起使用,以便应用程序能够连接到SQLite数据库。
    1. sqlite3.dll 是SQLite数据库引擎的二进制库,允许动态加载SQLite数据库引擎,而sqlite3.def 文件定义了 sqlite3.dll 中可供外部程序访问的函数和符号列表,以便其他程序可以在编译时正确链接到SQLite库。
  4. 把这些解压缩后的文件整理一下,以下是我的存放方式,统一放在 D:\sqlite 路径下。
  5. D:\sqlite 目录下文件存放方式如下:
    1. D:\sqlite\include 目录存放 sqlite-amalgamation-3430200.zip 解压后的文件。
    2. D:\sqlite\lib\x64 目录存放 sqlite-dll-win64-x64-3430200.zip 解压后的文件。
    3. D:\sqlite\lib\x86 目录存放 sqlite-dll-win32-x86-3430200.zip 解压后的文件。

2.编译SQLite3源码得到sqlite3.lib静态库

  1. 找到 Visual Studio 安装目录下的 lib.exe 工具路径,将该路径添加到系统环境变量中:(系统架构为64位选Hostx64目录,32位选Hostx86目录
    1. D:\Program Files\Visual Studio 2022\VC\Tools\MSVC\14.35.32215\bin\Hostx64\x64
    2. 上述路径表示 Visual Studio 2022 中的编译工具链是为在 64 位 Windows 操作系统上构建 64 位应用程序和库而设计的。这使我们能够使用 Visual Studio 来开发和构建适用于 64 位环境的软件。(其它路径同理
  2. 在上面的 D:\sqlite\x64 路径下打开终端,执行命令:LIB /MACHINE:X64 /DEF:sqlite3.def
    1. /MACHINE:X64:指定生成的库文件将用于 64 位体系结构,即 x64 架构。
    2. /DEF:sqlite3.def:指定用于生成库文件的定义文件(.def文件)。.def 文件通常包含了库文件的导出函数和符号信息。(通过def和dll文件生成lib文件
  3. 然后会生成sqlite3.exp和sqlite3.lib两个文件。
  4. 切换到 D:\sqlite\lib\x86 路径下并打开终端执行命令:LIB /MACHINE:X86 /DEF:sqlite3.def,将会生成用于32位的库文件。

3.lib.exe工具的作用(番外)

  1. lib.exe 是 Microsoft Visual Studio 中的库工具,它的主要用途是用于创建、管理和处理静态链接库(Static Link Library,.lib 文件)。
  2. lib.exe 具有以下主要功能和用途:
    1. 创建静态链接库lib.exe 可用于将多个目标文件(通常是 .obj 文件)合并成一个静态链接库文件,以便在编译和链接应用程序时使用。
    2. 添加和删除目标文件:可以使用 lib.exe 向现有的库文件中添加新的目标文件,也可以从库文件中删除不再需要的目标文件。
    3. 生成导入库lib.exe 通常用于生成库文件的导入版本(import library),以便在应用程序编译时链接到动态链接库(.dll 文件)。
    4. 列出库文件内容:可以使用 lib.exe 来列出库文件中包含的目标文件和符号信息。
    5. 更新库文件:如果库中的一个或多个目标文件已被更新,可以使用 lib.exe 来重新构建库文件,以确保它包含最新的目标文件。

二,使用vcpkg获取SQLite3库

  1. 安装vcpkg(如果尚未安装),参照 vcpkg安装和使用教程 文章。
  2. 安装SQLite3库命令如下,安装到vcpkg/packages目录下。
    1. 安装32位的SQLite3库:vcpkg install sqlite3
    2. 安装64位的SQLite3库:vcpkg install sqlite3:x64-windows
  3. 若不想配置项目属性,就执行该命令集成到项目中:vcpkg integrate install
  4. 然后用VS创建C++项目,编写C++代码,此步骤和前面一样就行。

七,Visual Studio下C++访问SQLite数据库

1.创建C++项目

  1. 打开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.运行效果

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

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

相关文章

新手最容易触发的10个PHP语言Bug分享

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

Linux性能优化--性能追踪:受CPU限制的应用程序(GIMP)

10.0 概述 本章包含了一个例子&#xff1a;如何用Linux性能工具在受CPU限制的应用程序中寻找并修复性能问题。 阅读本章后&#xff0c;你将能够&#xff1a; 在受CPU限制的应用程序中明确所有的CPU被哪些源代码行使用。用1trace和oprofile弄清楚应用程序调用各种内部与外部函…

基于蜜獾优化的BP神经网络(分类应用) - 附代码

基于蜜獾优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于蜜獾优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蜜獾优化BP神经网络3.1 BP神经网络参数设置3.2 蜜獾算法应用 4.测试结果&#xff1a;5.M…

MySQL双主一从高可用

MySQL双主一从高可用 文章目录 MySQL双主一从高可用环境说明1.配置前的准备工作2.配置yum源 1.在部署NFS服务2.安装主数据库的数据库服务&#xff0c;并挂载nfs3.初始化数据库4.配置两台master主机数据库5.配置m1和m2成为主数据库6.安装、配置keepalived7.安装部署从数据库8.测…

leetcode-200. 岛屿数量

1. 题目 leetcode题目链接 2. 解答 思路&#xff1a; 需要循环遍历每个节点&#xff1b;找到陆地&#xff0c;基于陆地开始遍历陆地的上下左右&#xff1b;数组dirm dirn就可以表示某个区域的上下左右&#xff1b;标记遍历过的节点&#xff1b;设计循环的退出条件&#xf…

Kotlin中的比较运算符

在Kotlin中&#xff0c;我们可以使用比较运算符进行值的比较和判断。下面对Kotlin中的等于、不等于、小于、大于、小于等于和大于等于进行详细介绍&#xff0c;并提供示例代码。 等于运算符&#xff08;&#xff09;&#xff1a; 等于运算符用于判断两个值是否相等。如果两个值…

XMLHttpRequest的readyState状态值

readyState状态值 功能&#xff1a;在Ajax请求与服务器响应中&#xff0c;是通过XMLHttpRequest对象完成。而readyState状态值则是记录XMLHttpRequest对象在这个过程进行变化的状态。 readyState状态值readyState分别有5个状态值 0&#xff1a;请求未初始化&#xff1a;在未点击…

微信小程序--数字化会议OA系统之首页搭建

一、Flex弹性布局 布局的传统解决方案&#xff0c;基于盒状模型&#xff0c;依赖 display属性 position属性 float属性。它对于那些特殊布局非常不方便&#xff0c;比如&#xff0c;垂直居中就不容易实现。 2009年&#xff0c;W3C提出了一种新的方案—-Flex布局&#xff0c;可…

python 运算符的优先级:先算乘除,后算加减,有括号的先算括号里面的。

运算符的优先级 什么是运算符的优先级&#xff1f;其实我们小学就已经接触过了&#xff0c;就是在一个表达式中&#xff0c;我们先算谁的问题。 先算乘除&#xff0c;后算加减&#xff0c;有括号的先算括号里面的。 个人建议&#xff1a; ① 不要把一个表达式****写得过于复杂…

【Java基础面试十五】、 说一说你对多态的理解

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;说一说你对多态的理解 …

【Java基础面试十四】、 封装的目的是什么,为什么要有封装?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a; 封装的目的是什么&…

MySQL事务MVCC详解

一、概述 MVCC (MultiVersion Concurrency Control) 叫做多版本并发控制机制。主要是通过数据多版本来实现读-写分离&#xff0c;做到即使有读写冲突时&#xff0c;也能做到不加锁&#xff0c;非阻塞并发读&#xff0c;从而提高数据库并发性能。 MVCC只在已提交读&#xff08…

CCF CSP认证 历年题目自练Day34

题目一 试题编号&#xff1a; 202303-1 试题名称&#xff1a; 田地丈量 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题描述&#xff1a; 问题描述 西西艾弗岛上散落着 n 块田地。每块田地可视为平面直角坐标系下的一块矩形区域&#xff0c;由左下角坐标 (x1,…

KNN-近邻算法 及 模型的选择与调优(facebook签到地点预测)

什么是K-近邻算法&#xff08;K Nearest Neighbors&#xff09; 1、K-近邻算法(KNN) 1.1 定义 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别&#xff0c;则该样本也属于这个类别。 来源&#xff1a;KNN算法最早是由Cover和Hart提…

【网络协议】聊聊从物理层到MAC层 ARP 交换机

物理层 物理层其实就是电脑、交换器、路由器、光纤等。组成一个局域网的方式可以使用集线器。可以将多台电脑连接起来&#xff0c;然后进行将数据转发给别的端口。 数据链路层 Hub其实就是广播模式&#xff0c;如果A电脑发出一个包&#xff0c;B、C电脑也可以收到。那么数据…

zk的二阶段提交图解

第一阶段&#xff1a;每次的数据写入事件作为提案广播给所有Follower结点&#xff1b;可以写入的结点返回确认信息ACK&#xff1b;第二阶段&#xff1a;Leader收到一半以上的ACK信息后确认写入可以生效&#xff0c;向所有结点广播COMMIT将提案生效。

Unity 实现一个FPS游戏的全过程

Unity是一款功能强大的游戏引擎&#xff0c;它提供了各种各样的工具和功能&#xff0c;以帮助开发者轻松地创建精美的3D游戏和应用程序。在本文中&#xff0c;我们将使用Unity实现一个FPS游戏的全过程&#xff0c;从场景设计、角色控制、敌人AI到最终的打包发布。 对啦&#x…

开源项目汇总

element-plus 人人开源 人人开源 多租户 若依 jeecg https://gitee.com/jeecg/jeecg?_fromgitee_search#https://gitee.com/link?targethttp%3A%2F%2Fidoc.jeecg.com jeeplus JeePlus快速开发平台 j2eefast Sa-Plus

地震勘探原理部分问题解答

1、二维/三维&#xff08;陆地/海洋&#xff09;地震勘探&#xff0c;炮点&#xff08;激发点&#xff09;和检波点&#xff08;接收点&#xff09;的排布位置如何&#xff1f;画图作答&#xff1f; &#xff08;1&#xff09;陆地地震勘探 二维陆地地震野外采集&#xff1a;震…

过滤器(Filter)和拦截器(Interceptor)有什么不同?

过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&#xff09;是用于处理请求和响应的中间件组件&#xff0c;但它们在实现方式和应用场景上有一些不同。 实现方式: 过滤器是Servlet规范中定义的一种组件&#xff0c;通常以Java类的形式实现。过滤器通过在…