首页天道酬勤sqlite3内存数据库读取(sqlite3数据库)

sqlite3内存数据库读取(sqlite3数据库)

admin 11-30 05:15 606次浏览

SQLite数据库通常存储在一个普通的磁盘文件中。然而,在某些情况下,数据库可能存储在内存中。

强制SQLite数据库存在于内存中最常见的方法是用特殊文件名打开数据库:memory:“”。换句话说,不是将真实磁盘文件的名称传递给sqlite3_open()、sqlite3_open16()或sqlite3_open_v2()函数之一,而是传入字符串“:memory”。例如:

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

调用此接口后,将不会打开任何磁盘文件。相反,在内存中创建新的数据库。数据库连接关闭后,数据库不再存在。每个内存数据库互不相同。因此,打开了两个数据库连接,每个数据库连接的文件名为:“memory:“”,将创建两个独立的内存数据库。

特殊文件名:“memory:”可以在数据库文件名允许的任何地方使用。例如,它可以用作文件名中的ATTACH命令:

将数据库“:memory:”作为aux1附加;

请注意,为了应用特殊的“:内存:”名称并创建一个纯内存数据库,文件名中不能有其他文本。因此,您可以通过添加路径名在文件中创建一个基于磁盘的数据库,如下所示:'。/:memory: '。

使用URI文件名时,也可以使用特殊的“:memory:”文件名。例如:

rc=sqlite3_open("文件:内存:",& db);

或者,

将数据库“file:memory:”作为aux1附加;

内存数据库和共享缓存

如果内存数据库以URI文件名打开,则允许它们使用共享缓存。如果名称“:memory:”用于指定内存中的数据库,则该数据库始终具有私有缓存,并且仅对最初打开它的数据库连接可见。但是,您可以通过两个或多个数据库连接打开同一个内存数据库,如下所示:

RC=SQLite 3 _ open(' file : memory :cache=shared ',db);

或者,

ATTACH DatabaSe ' file : memory :缓存=共享' AS aux1

这允许单独的数据库连接共享同一个内存数据库。当然,共享内存数据库的所有数据库连接都需要在同一个进程中。当数据库的最后一次连接关闭时,数据库将被自动删除,内存将被回收。

如果单个进程中需要两个或多个可以同时共享的不同内存数据库,可以将mode=memory query参数与URI文件名一起使用来创建命名内存数据库:

RC=SQLite 3 _ open(' file : mmed B1?mode=memorycache=shared ',db);

或者,

ATTACH DATABASE 'file:memdb1?mode=memory cache=shared ' AS aux 1;

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

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

rc=sqlite3_open(',db);

将数据库“”作为aux2附加;

每次都会创建一个不同的临时文件,所以就像使用特殊的“:memory:”字符串一样,到临时数据库的两个数据库连接都有自己的私有数据库。当创建它们的连接关闭时,临时数据库将被自动删除。

即使为每个临时数据库分配了一个磁盘文件,事实上,临时数据库通常驻留在内存中的页导航缓存中,因此由“:memory:”创建的纯内存数据库和临时数据库之间几乎没有区别。由空文件名创建。唯一的区别是“:memory:”数据库必须始终保留在内存中,如果数据库变得更大或SQLite面临内存压力,临时数据库的某些部分可能会刷新到磁盘。

的上一段描述了默认SQLite配置下临时数据库的行为。如果需要,应用程序可以使用temp_store编译指令和SQLITE_TEMP_STORE编译时参数来强制临时数据库显示为纯内存数据库。

如何覆盖CSS(B站狂神说)自学ElasticSearch7.6.x 从历史Go数据结构之堆排序怎么实现【云解析 UDNS】操作指南:绑定VPCQt专栏之模态与非模态对话框的实现Android夜间模式最佳实践
把昨天就在今天(就在今天一个) 强调用户体验(对旅游社的用户体验调查数据)
相关内容