SQLite数据库成为内存中数据库(三)

  返回:SQLite—系列文章目录   

 上一篇:SQLite使用的临时文件(二)

下一篇:SQLite中的原子提交(四)

​​

SQLite数据库通常存储在单个普通磁盘中文件。但是,在某些情况下,数据库可能存储在内存。
强制SQLite数据库纯粹存在的最常见方法在内存中是使用特殊文件名打开数据库“:内存:”。换句话说,而不是传递将真实磁盘文件放入sqlite3_open()、sqlite3_open16()或sqlite3_open_v2()函数之一,传入字符串“:memory:”。为例:

rc = sqlite3_open(":memory:", &db);

完成此操作后,不会打开任何磁盘文件。相反,将创建一个新数据库纯粹在内存中。一旦数据库停止存在,数据库就不再存在连接已关闭。每个:memory:数据库都不同于其他。因此,打开两个数据库连接,每个连接都使用文件名“:memory:”将创建两个独立的内存数据库。
特殊文件名“:memory:”可以在数据库的任何位置使用允许使用文件名。例如,它可以用作ATTACH命令中的文件名:

ATTACH DATABASE ':memory:' AS aux1;

注意,为了应用特殊的“:memory:”名称,并且创建一个纯内存数据库,在文件名。因此,可以通过在文件中预先添加来创建基于磁盘的数据库路径名,如下所示:“./:memory:”。
特殊的“:memory:”文件名在使用URI文件名时也有效。例如:

rc = sqlite3_open("file::memory:", &db);

 或者

ATTACH DATABASE 'file::memory:' AS aux1;

内存中数据库和共享缓存

如果使用URI文件名打开。如果使用朴素的“:memory:”名称若要指定内存中数据库,则该数据库始终具有专用数据库缓存,并且仅对最初打开了它。但是,同一个内存数据库可以由两个或更多数据库连接如下:

rc = sqlite3_open("file::memory:?cache=shared", &db);

或者 

ATTACH DATABASE 'file::memory:?cache=shared' AS aux1;

这允许单独的数据库连接共享相同的数据库连接内存中数据库。当然,所有数据库连接共享内存中数据库需要处于同一进程中。数据库是自动删除,并在上次连接时回收内存到数据库关闭。
如果需要两个或多个不同但可共享的内存中数据库在单个进程中,则mode=memory查询参数可以与URI文件名一起使用以创建命名的内存中数据库:

rc = sqlite3_open("file:memdb1?mode=memory&cache=shared", &db);

或者: 

ATTACH DATABASE 'file:memdb1?mode=memory&cache=shared' AS aux1;

以这种方式命名内存中数据库时,它只会共享其缓存与使用完全相同名称的另一个连接。

临时数据库

当传递给sqlite3_open()或ATTACH的数据库文件的名称为空字符串时,将创建一个新的临时文件来保存数据库。

rc = sqlite3_open("", &db);
ATTACH DATABASE '' AS aux2;

每次都会创建一个不同的临时文件,以便,就像使用特殊的“:memory:”字符串,两个数据库连接到临时每个数据库都有自己的私有数据库。临时数据库是当创建它们的连接关闭时自动删除。
即使为每个临时数据库分配了一个磁盘文件,在练习临时数据库通常驻留在内存寻呼机缓存中因此,纯内存数据库之间几乎没有区别由“:memory:”创建,以及由空文件名创建的临时数据库。唯一的区别是“:memory:”数据库必须保留在内存中在任何时候,临时数据库的某些部分都可能被刷新到磁盘如果数据库变大或SQLite处于内存压力之下。
前面几段描述了临时数据库的行为在默认的SQLite配置下。应用程序可以使用temp_store编译指示和SQLITE_TEMP_STORE编译时参数来如果需要,强制临时数据库的行为为纯内存中数据库。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

业务服务:xss攻击

文章目录 前言一、使用注解预防1. 添加依赖2. 自定义注解3. 自定义校验逻辑4. 使用 二、使用过滤器1. 添加配置2. 创建配置类3. 创建过滤器4. 创建过滤器类5. 使用 前言 xss攻击时安全领域中非常常见的一种方法,保证我们的系统安全是非常重要的 xss攻击简单来说就…

代码随想录 图论-并查集

代码随想录 (programmercarl.com) 寻找图中是否存在路径这道题中的类可看做并查集的标准类 目录 1971.寻找图中是否存在路径 684.冗余连接 685.冗余连接II 1971.寻找图中是否存在路径 1971. 寻找图中是否存在路径 已解答 简单 相关标签 相关企业 有一个具有 n 个顶…

使用ai智能写作场景之gpt整理资料,如何ai智能写作整理资料

Ai智能写作助手:Ai智能整理资料小助手 Ai智能整理资料小助手可试用3天! 通俗的解释一下怎么用ChatGPT来进行资料整理: 搜寻并获取指定数量的特定领域文章: 想像你在和我说话一样,告诉我你想要多少篇关于某个话题的文…

Flask python :logging日志功能使用

logging日志的使用 一、了解flask日志1.1、Loggers记录器1.2、Handlers 处理器1.3、Formatters 格式化器 二、使用日志2.1、官网上的一个简单的示例2.2、基本配置2.3、具体使用示例2.4、运行 三、写在最后 一、了解flask日志 日志是一种非常重要的工具,可以帮助开发…

【双指针】Leetcode 查找总价格为目标值的两个商品

题目解析 LCR 179. 查找总价格为目标值的两个商品 本题很友好&#xff0c;只需要返回任意一个 算法讲解 这道题很显然就是使用对撞双指针&#xff0c;一个从左边&#xff0c;一个从右边&#xff0c;两边进行和target比较来移动 代码编写 class Solution { public:vector<…

谷粒商城——缓存——SpringCache

1. 配置使用 首先需要导入相关的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency> 随后在配置文件中进行配置&#xff1a; spring:cache:t…

C语言文件操作(详细)

⽬录 一. 为什么使⽤⽂件&#xff1f; 二. 什么是⽂件&#xff1f; 三. ⼆进制⽂件和⽂本⽂件&#xff1f; 四. ⽂件的打开和关闭 五. ⽂件的顺序读写 六. ⽂件的随机读写 七. ⽂件读取结束的判定 八. ⽂件缓冲区 一. 为什么使⽤⽂件&#xff1f; 如果没有⽂件&#…

STM32技术打造:智能考勤打卡系统 | 刷卡式上下班签到自动化解决方案

文章目录 一、简易刷卡式打卡考勤系统&#xff08;一&#xff09;功能简介原理图设计程序设计 哔哩哔哩&#xff1a; https://www.bilibili.com/video/BV1NZ421Y79W/?spm_id_from333.999.0.0&vd_sourcee5082ef80535e952b2a4301746491be0 一、简易刷卡式打卡考勤系统 &…

docker拉取镜像

docker 拉取镜像 命令格式 docker pull 仓库名称[:标签] 从下载过程可以看出&#xff1a; &#xff08;1&#xff09;镜像文件是由若干层组成&#xff0c;即&#xff1a;AUFS联合文件系统。这是实现增量保存与更新的基础 &#xff08;2&#xff09;下载过程会输出各层镜像的信…

界面控件DevExpress WinForms/WPF v23.2 - 电子表格支持表单控件

DevExpress WinForm拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜任…

String类(三)

文章目录 string类&#xff08;三&#xff09;string类的模拟实现&#xff1a;1.默认成员变量和函数2.string的长度和下表引用3.字符串拷贝构造4. 赋值拷贝5.字符串比较6.字符串的增添操作7.insert插入操作8.遍历字符 string类&#xff08;三&#xff09; string类的模拟实现&…

Django(二)-搭建第一个应用(1)

一、项目环境和结构 1、项目环境 2、项目结构 二、编写项目 1、创建模型 代码示例: import datetimefrom django.db import models from django.utils import timezone# Create your models here.class Question(models.Model):question_text models.CharField(max_length2…

ES6 基础

文章目录 1. 初识 ES62. let 声明变量3. const 声明常量4. 解构赋值 1. 初识 ES6 ECMAScript6.0(以下简称ES6)是JavaScript语言的下一代标准&#xff0c;已经在2015年6月正式发布了。它的目标&#xff0c;是使得」JavaScript语言可以用来编写复杂的大型应用程序&#xff0c;成为…

【环境配置】Ubuntu MySQL 8.0.28 安装并允许外部客户端连接

文章目录 MySQL 安装步骤配置 MySQL Server 允许外部连接 MySQL 安装步骤 步骤一&#xff1a;在 MySQL 官网找到 apt 仓库&#xff0c;下载最新的仓库 点击 Download&#xff1a; 输入如下命令&#xff1a; sudo wget -c https://dev.mysql.com/get/mysql-apt-config_0.8…

Java拆装箱及128陷阱

有以下一段代码&#xff1a; Integer a 123; Integer b 123; int c 123; int d 123; System.out.println(c d); System.out.println(a b); System.out.println(a c); 这段代码运行的结果是什么呢&#xff1f; c d 一定为True。 由于Java中存在自动拆装箱&#xff0…

【Spring】Spring框架中的一个核心接口ApplicationContext 简介,以及入口 Run() 的源码分析

一、简介 ApplicationContext 是Spring框架中的一个核心接口&#xff0c;它是Spring IoC容器的实现之一&#xff0c;用于管理和组织应用程序中的各种Bean&#xff0c;同时提供了一系列功能来支持依赖注入、AOP等特性。 简单来说&#xff0c;ApplicationContext 是一个大型的、…

如何备考2025年AMC8竞赛?吃透2000-2024年600道真题(免费送题)

最近有家长朋友问我&#xff0c;现在有哪些类似于奥数的比赛可以参加&#xff1f;我的建议可以关注下AMC8的竞赛&#xff0c;类似于国内的奥数&#xff0c;但是其难度要比国内的奥数低一些&#xff0c;而且比赛门槛更低&#xff0c;考试也更方便。比赛的题目尤其是应用题比较有…

FPGA之组合逻辑与时序逻辑

数字逻辑电路根据逻辑功能的不同&#xff0c;可以分成两大类&#xff1a;组合逻辑电路和时序逻辑电路&#xff0c;这两种电路结构是FPGA编程常用到的&#xff0c;掌握这两种电路结构是学习FPGA的基本要求。 1.组合逻辑电路 组合逻辑电路概念&#xff1a;任意时刻的输出仅仅取决…

2015年认证杯SPSSPRO杯数学建模B题(第一阶段)替换式密码全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 B题 替换式密码 原题再现&#xff1a; 历史上有许多密码的编制方法。较为简单的是替换式密码&#xff0c;也就是将文中出现的字符一对一地替换成其它的符号。对拼音文字而言&#xff0c;最简单的形式是单字母替换加密&#xff0c;也就是以每个…

小迪安全48WEB 攻防-通用漏洞Py 反序列化链构造自动审计 bandit魔术方法

#知识点&#xff1a; 1、Python-反序列化函数使用 2、Python-反序列化魔术方法 3、Python-反序列化 POP 链构造&#xff08;payload构造&#xff09; 4、Python-自动化审计 bandit 使用 #前置知识&#xff1a; 函数使用&#xff1a; pickle.dump(obj, file) : 将对…