数据库设计与开发—初识SQLite与DbGate

news2024/11/25 4:32:10

一、SQLite与DbGate简介

(一)SQLite[1][3]

        SQLite 是一个部署最广泛、用 C 语言编写的数据库引擎,属于嵌入式数据库,其作为库被软件开发人员嵌入到应用程序中。

        SQLite 的设计允许在不安装数据库管理系统或不需要数据库管理员的情况下运行程序。与客户端 - 服务器数据库管理系统不同,SQLite 引擎没有应用程序与之通信的独立进程。相反,链接器将 SQLite 库(静态或动态)集成到应用程序中,该应用程序通过简单的函数调用使用 SQLite 的功能,减少数据库操作的延迟;对于并发很少的简单查询,SQLite 性能受益于避免进程间通信的开销。

SQLite使用优势

不需要一个单独的服务器进程或操作的系统(无服务器的)

②SQLite是轻量级的,完全配置时小于400KiB。同时,不依赖于任何外部库/模块;

一个完整的SQLite数据库是存储在一个单一的跨平台的磁盘文件

④SQLite事务完全兼容ACID,允许从多个进程或线程安全访问。同时,SQLite支持SQL92标准的大多数查询语言的功能;

⑤可多操作系统运行,包括Windows(Win32/WinCE/WinRT)、UNIX(Linux/Mac OS-X/Android/iOS)。

(二)DbGate[2]

       DbGate(Community)是一个开源免费的SQL+noSQL数据库的智能化管理、数据可视化客户端。

DbGate目标

①免费和开源;

②简单且功能强大,在工具栏中大量使用上下文菜单,提供便捷、易懂的使用体验;

③能够在多操作系统/多平台运行,包括Windows、Linux、Mac、Web browser、Mobile web(未来构想);

④稳定且鲁棒,保证数据库的安全正确运行;

⑤为大型数据库做准备,永远不将完整的表或查询结果加载到内存中,全部使用流操作;

⑥可使用脚本,基于dbgate nodejs 库包。

关联数据库图示(图源: DbGate | Open Source SQL+noSQL Database Client)

二、回调函数简述

        回调函数是一种在特定事件发生或特定条件满足时被调用的函数。回调函数通常作为参数传递给另一个函数,这个接收回调函数的函数在执行过程中,当满足特定条件时,会调用传递进来的回调函数。它的作用是允许在特定的时刻或特定的操作完成后执行自定义的逻辑。

回调函数的使用场景

①异步编程;

②事件处理;

③遍历数据结构对元素进行特定操作等。

使用回调函数的优势

①增加代码的灵活性。可以根据不同的需求传递不同的回调函数,从而在相同的执行流程中实现不同的行为;

②分离关注点。将特定操作的逻辑封装在回调函数中,使主函数更加专注于核心任务,从而提高代码的可读性和可维护性;

③实现异步执行。在异步编程中,回调函数使得程序能够在等待异步操作完成的同时继续执行其他任务,提高程序的相应性能。

注释

异步编程:异步编程是一种编程方式,它允许程序在执行某些耗时操作时,不会阻塞主线程的执行,而是继续执行其他任务,当耗时操作完成后,再通过回调函数事件触发其他机制来处理操作结果(传统的同步编程中,程序会按照顺序依次执行每个任务,等待一个任务完成后才会开始下一个任务)。

三、实践Demo

        Demo主要参考资料:SQLite – C/C++ | 菜鸟教程 (runoob.com)

        1、Windows操作系统下安装编译SQLite3的方法详见参考资料[5-6],已编译好的3.46.1版本SQLite文件库可见绑定资源。

        2、常规配置测试项目的VC++目录和链接器

        ①项目属性页->VC++目录->添加SQLite包含目录->添加SQLite库目录->应用;

        ②项目属性页->链接器->输入->添加附加依赖项sqlite3.lib->应用。

        3、测试代码

#include <iostream>
#include <sqlite3.h>

using namespace std;

static int callback(void* NotUsed, int argc, char** argv, char** azColName) {
    NotUsed = 0;
    for (int i = 0; i < argc; i++) {
        std::cout << azColName[i] << " = " << (argv[i] ? argv[i] : "NULL") << std::endl;
    }
    std::cout << std::endl;
    return 0;
}

int main() {
    sqlite3* db;
    char* errMsg = 0;
    int rc;

    // 打开数据库,如果不存在则创建
    rc = sqlite3_open("example.db", &db);
    if (rc) {
        std::cerr << "无法打开数据库: " << sqlite3_errmsg(db) << std::endl;
        sqlite3_close(db);
        return 1;
    }
    else {
        std::cout << "数据库打开成功" << std::endl;
    }

    // 创建表
    std::string sql = "CREATE TABLE IF NOT EXISTS MyTable("
        "ID INTEGER PRIMARY KEY AUTOINCREMENT,"
        "Name TEXT,"
        "Age INTEGER);";
    rc = sqlite3_exec(db, sql.c_str(), callback, 0, &errMsg);
    if (rc != SQLITE_OK) {
        std::cerr << "SQL 错误: " << errMsg << std::endl;
        sqlite3_free(errMsg);
    }
    else {
        std::cout << "表创建成功" << std::endl;
    }

    // 插入数据
    sql = "INSERT INTO MyTable(Name, Age) VALUES('John', 30);";
    rc = sqlite3_exec(db, sql.c_str(), callback, 0, &errMsg);
    if (rc != SQLITE_OK) {
        std::cerr << "SQL 错误: " << errMsg << std::endl;
        sqlite3_free(errMsg);
    }
    else {
        std::cout << "数据插入成功" << std::endl;
    }

    // 查询数据
    sql = "SELECT * FROM MyTable;";
    rc = sqlite3_exec(db, sql.c_str(), callback, 0, &errMsg);
    if (rc != SQLITE_OK) {
        std::cerr << "SQL 错误: " << errMsg << std::endl;
        sqlite3_free(errMsg);
    }

    // 关闭数据库
    sqlite3_close(db);

    return 0;
}

        4、打开DbGate连接数据库

        ①.db数据库文件获取。若未设置特定的数据库文件存储位置,那么VS2019编程平台会将其存储在解决方案(.sln)同目录下;

        ②连接SQLite数据库。File->Add connection->select connection type->选择对应的数据库类型(此处为SQLite)->在Database file处导入.db文件->Connect->即可。

四、实践结果

步骤3 数据库/表创建与数据插入测试结果
步骤4 DbGate管理可视化数据库结果

SQLite下载地址

Tags · sqlite/sqlite · GitHub(旧版本源码)

SQLite Download Page(最新版本,包含预编译二进制文件)

DbGate下载地址

DbGate | Open Source SQL+noSQL Database Client

DB Browser for SQLite下载地址(Github 21.1k星)

https://github.com/sqlitebrowser/sqlitebrowser

参考资料:

[1] https://en.wikipedia.org/wiki/SQLite

[2] An Introduction To The SQLite C/C++ Interface

[3] SQLite 教程 | 菜鸟教程 (runoob.com)

[4] 10 个 SQLite 数据库可视化工具(GUI)推荐 (zzxworld.com)

[5] Win11下基于VS2022编译SQLite3源码_sqlite下载 win11-CSDN博客(最新版本使用方法)

[6] sqlite/doc/compile-for-windows.md at master · sqlite/sqlite · GitHub(旧版本源码MSVC编译方法)

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

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

相关文章

QT QML 练习4

效果&#xff1a;鼠标按下Tab建可以选选择标签或者方块之间的切换 这段代码使用了 QtQuick 框架&#xff0c;创建了一个包含两个 Text 元素和两个嵌套 Rectangle 的用户界面。以下是对代码中涉及的主要知识点和实现细节的介绍&#xff1a; 知识点及代码细节介绍 导入 QtQuic…

SpringAOP学习文档

目录 一、概念二、示例代码三、切点1、execution2、within3、this4、target5、args6、annotation7、within8、target9、args10、组合切点表达式11、在Before注解中使用自定义的切入点表达式&#xff0c;以及切入点方法12、获取指定类型的真实对象 四、通知1、Around注解的通知方…

AI赋能,精准防控:AI智能分析网关V4人员徘徊算法的技术优势与应用场景

随着科技的飞速发展&#xff0c;视频监控系统在各个领域的应用越来越广泛&#xff0c;从公共安全到商业管理&#xff0c;再到交通监控等。AI智能分析网关V4作为新一代的视频分析设备&#xff0c;以其强大的智能分析能力和多样化的应用场景&#xff0c;成为市场关注的焦点。本文…

pytorch与卷积神经网络实战笔记

课程视频链接 CNN卷积神经网络算法原理 全神经网络的整体结构 输入层&#xff08;x1, x2, x3…&#xff09;->隐藏层&#xff08;全连接&#xff09;->输出层&#xff0c;整体就类似于一个函数&#xff0c;输入x&#xff0c;经过函数module(x)得到输出y的过程&#xf…

WPF常见容器全方位介绍

Windows Presentation Foundation (WPF) 是微软的一种用于构建Windows桌面应用程序的UI框架。WPF的布局系统基于容器&#xff0c;帮助开发者以灵活、响应的方式组织用户界面 (UI) 元素。本篇文章将详细介绍WPF中几种常见的容器&#xff0c;包括Grid、StackPanel、WrapPanel、Do…

SpringMVC源码-处理器适配器HandlerAdapter

因为定义controller的方式有三种&#xff0c;每种不同的方式调用的方法不同&#xff0c;尤其是注解修饰的 方法名是自定义的 因此需要通过适配器模式来调用方法执行 initStrategies进行适配器的初始化 处理器适配器一共有如下四种: org.springframework.web.servlet.Handl…

springboot系列--web相关知识探索五

一、前言 web相关知识探索四中研究了请求中所带的参数是如何映射到接口参数中的&#xff0c;也即请求参数如何与接口参数绑定。主要有四种、分别是注解方式、Servlet API方式、复杂参数、以及自定义对象参数。web相关知识探索四中主要研究了复杂参数底层绑定原理。本次主要是研…

有效三⻆形的个数 05

有效三⻆形的个数 我写的 class Solution {public int triangleNumber(int[] nums) {Arrays.sort(nums);int sum0;for (int knums.length-1;k>1;k--) {int left0;int rightk-1;while(right>left) {if (nums[left]nums[right]>nums[k]) {sum(right-left);right--;…

QD1-P26、27、28 CSS 属性 文本

本节&#xff08;P26、27、28 三合一&#xff09;学习&#xff1a;CSS 文本属性。 ‍ 本节视频 https://www.bilibili.com/video/BV1n64y1U7oj?p26 CSS&#xff08;层叠样式表&#xff09;中用于设置文本样式的属性有很多&#xff0c;以下是一些常用的文本属性&#xff1a; …

[数据结构]栈的实现与应用

文章目录 一、引言二、栈的基本概念1、栈是什么2、栈的实现方式对比3、函数栈帧 三、栈的实现1、结构体定义2、初始化3、销毁4、显示5、数据操作 四、分析栈1、优点2、缺点 五、总结1、练习题2、源代码 一、引言 栈&#xff0c;作为一种基础且重要的数据结构&#xff0c;在计算…

Mybatis高级查询-一对多查询

表介绍和表关系说明 新建以下4张表 tb_user&#xff1a;用户表 tb_order&#xff1a;订单表 tb_item&#xff1a;商品表 tb_orderdetail&#xff1a;订单详情表 【表关系】 1.tb_user和 tb_order表关系tb_user 《》 tb_order&#xff1a;一对多&#xff0c; 一个人可以下多…

Oracle漏洞修复 19.3 补丁包 升级为19.22

1.场景描述 上周末2024-10-12日,服务器扫出漏洞,希望及时修复。其中,oracle的漏洞清单如下,总结了下,基本都是 Oracle Database Server 的 19.3 版本到 19.20 版本和 21.3 版本到 21.11 版本存在安全漏洞,即版本问题。如: Oracle Database Server 安全漏洞(CVE-2023-22…

241013深度学习之GoogleLeNet

文章目录 1. GoogleLeNet2.Inception块3.googleLeNet模型4.训练模型4.1运行结果图 5.小结 1. GoogleLeNet 全称&#xff1a;含并行连接的网络 在2014年的ImageNet图像识别挑战赛中&#xff0c;一个名叫GoogLeNet (Szegedy et al., 2015)的网络架构大放异彩。 GoogLeNet吸收了N…

ZED相机的使用

ZED双目相机型号是ZED 2 立体相机&#xff08;ZED2 Stereo Camera&#xff0c;Stereolabs , San Francisco, USA&#xff09;&#xff0c;其中还包括USB 3.0 数据线&#xff0c;以及一个迷你三脚架。 一、查看自己的cuda nvidia-smi # 查看显卡驱动信息 nvcc -V # 查看CUDA的…

C++——vector的了解与使用

目录 引言 vector容器的基本概念 1.功能 2.动态大小 3.动态扩展 vector的接口 1.vector的迭代器 2.vector的初始化与销毁 3.vector的容量操作 3.1 有效长度和容量大小 (1)使用示例 (2)扩容机制 3.2 有效长度和容量操作 (1)reserve (2)resize 4.vector的访问操作…

电脑基础知识:mfc110.dll丢失的解决方法

1.mfc110.dll 丢失常见原因 mfc110.dll 文件的丢失或损坏是Windows系统中常见的问题&#xff0c;它可能由多种原因引起&#xff0c;以下是一些主要的因素&#xff1a; 不完全的软件卸载 在卸载程序时&#xff0c;如果相关的 DLL 文件没有被正确移除&#xff0c;可能会导致文件…

aarch64-linux-gnu-gcc交叉编译opencv移植到linuxaarch64上

所谓的将OpenCV移植到某个平台&#xff0c;就是用该平台对应的编译器将OpenCV源代码编译成so库 1.下载3.4.5opencv源码 解压 安装aarch64-linux-gnu-gcc 在执行 bash build-linux_RK3588.sh过程中&#xff0c;提示什么&#xff0c;装就行了。 装完之后 trolongtrolong-virtu…

机器学习的四大学派:符号主义学派、贝叶斯学派、连接主义学派与进化仿生学派

目录 前言1. 符号主义学派1.1 含义与理论基础1.2 特点1.3 应用 2. 贝叶斯学派2.1 含义与理论基础2.2 特点2.3 应用 3. 连接主义学派3.1 含义与理论基础3.2 特点3.3 应用 4. 进化仿生学派4.1 含义与理论基础4.2 特点4.3 应用 结语 前言 机器学习作为人工智能的核心技术之一&…

【AUTOSAR 基础软件】ComM模块详解(通信管理)

文章包含了AUTOSAR基础软件&#xff08;BSW&#xff09;中ComM模块相关的内容详解。本文从AUTOSAR规范解析&#xff0c;ISOLAR-AB配置以及模块相关代码分析三个维度来帮读者清晰的认识和了解ComM这一基础软件模块。文中涉及的ISOLAR-AB配置以及模块相关代码都是依托于ETAS提供的…

2.随机变量及其分布

第二章 随机变量及其分布 1. 随机变量及其分布 1.1 随机变量的定义 定义1.1 随机变量 ​ 定义在样本空间 Ω \Omega Ω上的实值函数 X X ( ω ) XX(\omega) XX(ω)称为随机变量,常用大写字母 X , Y , Z X,Y,Z X,Y,Z等表示随机变量&#xff0c;其取值用小写字母 x , y , z …