-
2022-04-28 09:42:43
一、内存数据库:
在SQLite中,数据库通常是存储在磁盘文件中的。然而在有些情况下,我们可以让数据库始终驻留在内存中。最常用的一种方式是在调用sqlite3_open()的时候,数据库文件名参数传递”:memory:”,如:
代码如下:
rc = sqlite3_open(“:memory:”, &db);在调用完以上函数后,不会有任何磁盘文件被生成,取而代之的是,一个新的数据库在纯内存中被成功创建了。由于没有持久化,该数据库在当前数据库连接被关闭后就会立刻消失。需要注意的是,尽管多个数据库连接都可以通过上面的方法创建内存数据库,然而它们却是不同的数据库。
更多相关内容 -
快速入门sqlite内存数据库,用sqlite构建一日志工具
2019-03-17 01:46:49NULL 博文链接:https://raojl.iteye.com/blog/556364 -
SpringBoot集成内存数据库Sqlite
2021-09-07 07:01:36在SpringBoot中集成内存数据库Sqlite. 为什么 像H2、hsqldb、derby、sqlite这样的内存数据库,小巧可爱,做小型服务端演示程序,非常好用。最大特点就是不需要你另外安装一个数据库。 操作步骤 修改pom.xml文件 &...目标
在SpringBoot中集成内存数据库Sqlite.
为什么
像H2、hsqldb、derby、sqlite这样的内存数据库,小巧可爱,做小型服务端演示程序,非常好用。最大特点就是不需要你另外安装一个数据库。
操作步骤
- 修改pom.xml文件
<dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.36.0.3</version> </dependency>
- 修改项目配置文件application.yml
spring: datasource: username: hsp password: 123456 url: jdbc:derby:blogDb;create=true driver-class-name: org.apache.derby.jdbc.EmbeddedDriver schema: classpath:schema.sql data: classpath:data.sql initialization-mode: always continue-on-error: true
- 添加初始化数据文件
- 建表脚本:schema.sql
CREATE TABLE `blog` ( `id` int AUTO_INCREMENT NOT NULL, `title` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) );
- 导入数据脚本:data.sql
insert into blog(id,title) values(1,'花生皮编程博客');
- 启动类:HspApplication
@MapperScan({"cn.hsp.blog"}) @SpringBootApplication public class HspApplication { public static void main(String[] args) { SpringApplication.run(HspApplication.class, args); } }
- Controller类:BlogController
@RestController @RequestMapping("/blog") public class BlogController { @Autowired private BlogMapper blogMapper; @GetMapping(value="/query") public List<Blog> query() { return blogMapper.query(); } }
- Mapper类:BlogMapper
@Repository public interface BlogMapper { @Select(value = "select * from blog") List<Blog> query(); }
- 数据bean:Blog
@Data public class Blog { private int id; private String title; }
工程截图
运行
运行HspApplication即可
效果
完整源代码
https://gitee.com/hspbc/springboot_memdb.git
关于我
厦门大学计算机专业|华为八年高级工程师
十年软件开发经验,5年编程培训教学经验
目前从事编程教学,软件开发指导,软件类毕业设计指导。
所有编程资料及开源项目见https://cxyxy.blog.csdn.net/article/details/120405881集成内存数据库系列
SpringBoot集成内存数据库H2
SpringBoot集成内存数据库Derby
SpringBoot集成内存数据库hsqldb
SpringBoot集成内存数据库Sqlite -
SQLite教程(十):内存数据库和临时数据库
2020-12-15 21:58:12一、内存数据库: 在SQLite中,数据库通常是存储在磁盘文件中的。然而在有些情况下,我们可以让数据库始终驻留在内存中。最常用的一种方式是在调用sqlite3_open()的时候,数据库文件名参数传递”:memory:”,如: ... -
SQLite 内存数据库学习手册
2020-12-16 11:31:08一、内存数据库: 在SQLite中,数据库通常是存储在磁盘文件中的。然而在有些情况下,我们可以让数据库始终驻留在内存中。最常用的一种方式是在调用sqlite3_open()的时候,数据库文件名参数传递”:memory:”,如: ... -
Sqlite3内存数据库
2020-12-23 18:18:39Sqlite3内存数据库Sqlite3内存数据库环境及依赖功能演示-内存模式功能演示-文件模式## 功能演示-文件加载到内存功能演示-内存保存到文件执行结果-第N次执行执行结果-第N+1次执行 Sqlite3内存数据库 Sqlite3是一个...Sqlite3内存数据库
Sqlite3是一个小型的,嵌入式的数据库。它还具有一个特色的功能:即内存数据库模式(与Redis ,Memcached等不同)。 这篇文章使用 .Net 5.0 平台演示实现Sqlite3的内存数据库模式。
环境及依赖
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 开发环境**.Net 5.0**
- VS2019
- Nuget 包: Microsoft.Data.Sqlite
功能演示-内存模式
using Microsoft.Data.Sqlite; public class MsSqliteTest { string MemoryConnStr = "Data Source=InMemorySample;Mode=Memory;Cache=Shared"; string FileConnStr = "Data Source=MsSqliteTest.db;Cache=Shared"; SqliteConnection Conn; public bool CheckTableExists(SqliteConnection Conn, string tableName) { var comm = Conn.CreateCommand(); comm.CommandText = $"Select Count(name) FROM sqlite_master WHERE type='table' AND name='{tableName}';"; int rt = System.Convert.ToInt32(comm.ExecuteScalar()); return rt > 0; } public bool OpenCreateTable(SqliteConnection Conn) { Conn.Open(); if (CheckTableExists(Conn, "Users") == false) { var comm = Conn.CreateCommand(); comm.CommandText = "Create Table Users (Id Integer PRIMARY KEY AUTOINCREMENT, Name CHAR (2, 20) NOT NULL, Age INTEGER);"; int rt = System.Convert.ToInt32(comm.ExecuteNonQuery()); comm.Dispose(); return rt > 0; } return true; } public int InsertTable(SqliteConnection Conn) { var comm = Conn.CreateCommand(); comm.CommandText = "insert into Users (Name,Age) Values ('xiaoming1',25)"; int rt = System.Convert.ToInt32(comm.ExecuteNonQuery()); comm.Dispose(); return rt; } public int SelectTableCount(SqliteConnection Conn) { var comm = Conn.CreateCommand(); comm.CommandText = "select Count(ID) From Users"; int rt = System.Convert.ToInt32(comm.ExecuteScalar()); comm.Dispose(); return rt; } public void MemTest() { Conn = new SqliteConnection(MemoryConnStr); OpenCreateTable(Conn); Console.WriteLine("Mem:Insert=" + System.Convert.ToString(InsertTable(Conn))); Console.WriteLine("Mem:Select=" + System.Convert.ToString(SelectTableCount(Conn))); Conn.Close(); Conn.Dispose(); } }
功能演示-文件模式
public void FileTest() { Conn = new SqliteConnection(FileConnStr); OpenCreateTable(Conn); Console.WriteLine("File:Insert=" + System.Convert.ToString(InsertTable(Conn))); Console.WriteLine("File:Select=" + System.Convert.ToString(SelectTableCount(Conn))); Conn.Close(); Conn.Dispose(); }
功能演示-文件加载到内存
public void LoadFileToMem() { Conn = new SqliteConnection(FileConnStr); Conn.Open(); var MemConn = new SqliteConnection(MemoryConnStr); MemConn.Open(); Conn.BackupDatabase(MemConn); Console.WriteLine(SelectTableCount(Conn)); Console.WriteLine(SelectTableCount(MemConn)); Conn.Close(); Conn.Dispose(); MemConn.Close(); MemConn.Dispose(); }
功能演示-内存保存到文件
/// <summary> /// 子查询第6到10条:共5条 /// </summary> public void SQLiteSubSelectTest(SqliteConnection Conn, int startLine, int endLine) { // SQL Server // select top 10 * from users where id not in(select top 30 id from users order by id asc) order by id asc var comm = Conn.CreateCommand(); var Count = endLine - startLine + 1; var NotInCount = startLine - 1; // Select ID from users where id not in(select ID from users order by id asc Limit 0,5) order by id asc Limit 0,5 comm.CommandText = $"Select ID from Users Where ID not in(select ID from Users Limit 0,{NotInCount}) Limit 0,{Count}"; var reader = comm.ExecuteReader(); var readedLine = 0; while (reader.Read()) { Console.WriteLine($"ID={reader.GetInt32(0)}"); readedLine++; } Console.WriteLine($"SQLiteSubSelect Read Line={readedLine}"); reader.Close(); reader.DisposeAsync(); comm.Dispose(); } public void SaveMemToFileTest() { Conn = new SqliteConnection(FileConnStr); Conn.Open(); var MemConn = new SqliteConnection(MemoryConnStr); MemConn.Open(); Conn.BackupDatabase(MemConn); //Load File To Mem Console.WriteLine(SelectTableCount(Conn)); Console.WriteLine(SelectTableCount(MemConn)); Console.WriteLine(InsertTable(MemConn)); Console.WriteLine(InsertTable(MemConn)); Console.WriteLine(SelectTableCount(MemConn)); MemConn.BackupDatabase(Conn); //Save Mem To File SQLiteSubSelectTest(MemConn, 6, 10); MemConn.Close(); MemConn.Dispose(); Conn.Close(); Conn.Dispose(); } public void AllTest() { MemTest(); FileTest(); LoadFileToMem(); SaveMemToFileTest(); } public void Main(string[] argv) { MsSqliteTest ms = new MsSqliteTest(); // ms.MemTest() // ms.FileTest() // ms.LoadFileToMem() // ms.SaveMemToFileTest() ms.AllTest(); }
执行结果-第N次执行
Mem:Insert=1 Mem:Select=1 File:Insert=1 File:Select=4 4 4 4 4 1 1 6 ID=6 SQLiteSubSelect Read Line=1
执行结果-第N+1次执行
Mem:Insert=1 Mem:Select=1 File:Insert=1 File:Select=7 7 7 7 7 1 1 9 ID=6 ID=7 ID=8 ID=9 SQLiteSubSelect Read Line=4
-
sqlite3内存数据库+封装(支持多线程)-易语言
2021-06-11 16:55:41的sqlite3数ju 库模块1年多了,稳定的雅痞。 感谢酷宝贝提供的帮助和例程:原贴 -> 点我传送 今天特意来分享一下我自己写的内存数ju库操作例程 同时附带自己封装的增删查改函数,不一定对大家都有用 大家可以看此... -
嵌入式数据库SQLite与Java
2021-04-28 01:08:12嵌入式数据库SQLite与Java嵌入式数据库SQLite与JavaSQLite作为一个开源的嵌入式数据库产品,具有系统开销小,检索效率高的特性,适用于手机、PDA、机顶盒设备等电器,并且作为嵌入式数据库在可下载的消费类应用程序...嵌入式数据库SQLite与Java
嵌入式数据库SQLite与Java
SQLite作为一个开源的嵌入式数据库产品,具有系统开销小,检索效率高的特性,适用于手机、PDA、机顶盒设备等电器,并且作为嵌入式数据库在可下载的消费类应用程序中运行的很好。这篇文章介绍嵌入式数据库产品SQLite的技术特点,并着重讨论研究与Java语言之间的接口,并以实例说明如何使用JAVA开发基于SQLite的应用程序。
通常我们采用各种数据库产品来实现对数据的存储、检索等功能,例如,Oracle,SQL Server,MySQL等等。这些产品除提供基本的查询,删除,添加等功能外,也提供了很多高级特性,如触发器,存储过程,数据备份恢复,全文检索功能等。但实际上,很多的应用,仅仅利用到了这些数据库产品的基本特性而已。而且在一些小型应用上,或者某些特殊场合的应用,比如桌面程序,这些数据库产品就明显有一些臃肿。在这些情况下,嵌入式数据库的优势就特别明显了。
嵌入式数据库无须独立运行的数据库引擎,它是由程序直接调用相应的API去实现对数据的存取操作。更直白的讲,嵌入式数据库是一种具备了基本数据库特性的数据文件。嵌入式数据库与其它数据库产品的区别是,前者是程序驱动式, 而后者是引擎响应式。嵌入式数据库的一个很重要的特点是它们的体积非常小,编译后的产品也不过几十K。这不但对桌面程序的数据存储方案是一个很好的选择,也使得它们可以应用到一些移动设备上。同时,很多嵌入式数据库在性能上也优于其它数据库,所以在高性能的应用上也常见嵌入式数据库的身影。
下面介绍的是开放源代码的嵌入式数据库,SQLite。同时侧重研究如何应用Java连接SQLite数据库,并开发基于SQLite的应用程序。
SQLite 是D ·理查德·希普开发出来的用一个小型C 库实现的一种强有力的嵌入式关系数据库管理体制。它提供了对SQL92 的大多数支持: 支持多表和索引、事务、视图、触发和一系列的用户接口及驱动
SQLite 实现了完备的、可嵌入的、零配置的SQL数据库引擎。它的特点包括:
1、事务处理是原子的、一致的、独立的和持久的(ACID),即使在系统崩溃和掉电以后。
2、零配置,即不需要设置和管理。
3、实现了绝大部分的SQL92标准。
4、一个单独的磁盘文件存储一个完整的数据库。
5、数据库文件在机器之间可自由共享。
6、支持数据库文件大小至2TB。
7、字符串和BLOG的大小只受限于可用存储器容量。
8、代码量小,即小于30K的C代码行和小于250K的代码空间(gcc 在i486上)
9、对于绝大多数普通操�
相关文档:
★如何权衡?
当你在权衡某个场合是否应该使用SQLite时,(在技术层面)至少要考虑如下几点:
◇能否发挥SQLite的某些特长?
◇是否还有其它的替代方案?
◇是否有啥潜在的技术风险?
想清楚上述问题之后,再做出决策。
★SQLite的特点
关于SQLite的特长,在上次的帖子中已经介绍过了。 ......
因为项目需要,需要使用sqlite,在csdn的blog中,发现了此文章,
以下系列均摘自:http://www.cnblogs.com/hustcat/ 谢谢!
1、SQLite介绍
自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分。正与数据库管理系统非常关键一样,它们也变得非常庞大,并占用了相当多的系统资源,增� ......
SQLite和其他大部分现代SQL数据库在基本设计目标上是不同的,它的目标是简单。SQLite遵循这一目标,即使这样偶尔会导致某些特性实现的低效化。下面列举了SQLite的一些缺陷:
SQL-92特性方面
正如前面提到的,SQLite不支持SQL-92的在很多企业数据库系统中可用的一些特性。
如:
外键约束(可解析的,但非强制)
很多ALT ......
SQLite不仅可以把数据库 放在硬盘上,还可以放在内存中(sqlite3_open(":memory:", &db)),经测试,同样条件下数据库放在内存中比放在硬盘上插入记录速度快差不多3倍。但数据库放在内存中时有如下缺陷:
1、断电或程序崩溃后数据库就会消失,你需要定期Attach到硬盘上备份;
2、在内存中的数据库不能被别的进程 ......
判断表存在的方法很简单,网上很多:
SELECT COUNT(*) from sqlite_master where type='table' and name='%s'" % tname;
那么判断字段是否存在, 或者说如何判断表的版本是否最新就只需要:
select * from sqlite_master where tbl_name='tblContactList';
sqlite_master 的表结构如下:
type |name  ......
-
Android创建和使用数据库SQLIte
2021-01-05 22:30:38一、关系型数据库SQLIte 每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库—SQLite。SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计... -
python使用SQLite数据库
2022-04-26 18:55:52SQLite是python自带的一款基于内存或硬盘的、开源的、关系型的轻量级数据库。这意味着无需下载安装SQLite数据库产品和对应的数据库驱动程序,可以被python语言以模块导入方式直接调用。 2、建立基于内存的数据库 ... -
sqlite3内存数据库与文件数据库的应用总结
2021-10-07 16:01:21为了解决该问题,我们可以将数据写入内存数据库中,定时把内存数据库的数据保存到文件数据库中,较少磁盘的操作次数。 C代码 1.创建文件数据库; 2.创建内存数据库; 3.创建文件数据库表格; 4.创建内存数据库表格... -
C++中内存数据库SQLite的使用
2014-05-14 15:09:221、 下载sqlite文件。 下载网址:http://www.sqlite.org/download.html...sqlite-dll-win32-x86-3080200.zip:包含sqlite3.def、sqlite3.dll文件。 sqlite-amalgamation-3080200.zip:包含sqlite3.h 文件 -
Delphi使用SQLite3内存数据库
2014-11-11 16:22:58Delphi使用SQLite3,包括本地数据库和内存数据库,本地数据库加载到内存,内存数据库备份到本地,使用sqlite simple delphi包装类。 -
内存数据库性能评测之SQLite数据库
2016-09-13 16:38:13内存数据库性能评测之SQLite数据库 复制链接打印 2012年10月17日00:05 | 我来说两句(0人参与) | 保存到博客 IT168网 【IT168 专稿】SQLite是一款轻型的数据库,它... -
Qt Sqlite内存数据库和文件数据库交互
2021-10-21 15:39:243、采用QSqlDatabase实现Sqlite的内存数据库和文件数据库交互。 一、将文件数据库加载到内存数据库(示例见第三节) 1、打开文件数据库获取所有的表名,[关闭文件数据库]; 2、打开内存数据库,将文件数据库... -
内存数据库SQLite和H2比较
2014-01-15 10:12:09内存数据库,顾名思义就是将数据放在内存中直接操作的数据库。...本文中主要为大家介绍两种内存数据库类型,即SQLite和H2内存数据库,将SQLite和H2内存数据库二者进行各方面性能的比较,希望对大家那 -
轻量级开源内存数据库SQLite性能测试
2015-07-10 14:22:18轻量级开源内存数据库SQLite性能测试 SQLite是一款轻型的数据库,它占用资源非常的低,同时能够跟很多程序语言相结合,但是支持的SQL语句不会逊色于其他开源数据库。它的设计目标是嵌入式的,而且目前已经在很... -
如何使用sqlite创建内存数据库?
2020-12-17 07:02:38我正在尝试使用Python中的sqlite3创建内存中的数据库。我创建了一个函数来创建一个数据库文件并将信息存储到其中,这是100%的工作。但是,试图与:memory:联系,我遇到了一些问题。我要做的是:import sqlite3def ... -
.Net 5 内存数据库(共享式)Sqlite
2021-08-02 09:43:48Install-Package Microsoft.Data.Sqlite.Core Install-Package SQLitePCLRaw.bundle_winsqlite3 示例代码有 SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_winsqlite3()); // Using a name and a ... -
内存数据库和临时数据库
2020-12-14 21:27:27一、内存数据库: 在SQLite中,数据库通常是存储在磁盘文件中的。然而在有些情况下,我们可以让数据库始终驻留在内存中。常用的一种方式是在调用sqlite3_open()的时候,数据库文件名参数传递":memory:",如: ... -
Delphi内存数据库
2016-03-18 12:17:23在内存中创建数据库,然后在创建表及编辑操作。 将内存数据库保存到文件中 -
文件数据库之sqlite 与内存数据库 redis
2014-06-28 11:57:50内存数据库:大数据时代数据管理新宠 在 2012中国系统架构师大会上,笔者曾做过一份有关大数据的调查,其中一项“在众多的技术趋势中,您所关注的数据管理的新技术是什么?”的调查结果中, “内存数据库”成为仅次... -
sqlite内存数据库、文件数据库
2019-07-16 09:06:13由于sqlite对多进程操作支持效果不太理想,在项目中,为了避免频繁读写 文件数据库带来的性能损耗,我们可以采用操作sqlite内存数据库,并将内存数据库定时同步到文件数据库中的方法。 实现思路如下: 1、创建... -
sqlite内存数据库
2011-12-27 08:02:51此资源有sqlite内存数据库和使用方法。 -
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2020-12-24 18:06:45本文实例讲述了Python实现读取TXT文件数据并存进内置数据库SQLite3的方法。分享给大家供大家参考,具体如下: 当TXT文件太大,计算机内存不够时,我们可以选择按行读取TXT文件,并将其存储进Python内置轻量级splite... -
sqlite3内存数据库同步到文件数据库
2020-07-14 14:01:40由于直接访问文件型数据库太耗时,可以先将数据写入内存型数据库,然后定时同步到文件中。但是这样做有风险,如果遇到设备掉电,会存在丢数据情况。 #include <iostream> #include <sqlite3.h> #... -
【嵌入式实验】《嵌入式数据库 sqlite 移植及使用》
2020-05-26 17:46:09嵌入式数据库 sqlite 移植及使用一、实验目的二.实验内容三.预备知识四.实验设备及工具(包括软件调试工具)五.实验步骤5.1 移植嵌入式数据库 sqlite 一、实验目的 理解嵌入式软件移植的基本方法,掌握 sqlite ... -
sqlite内存数据库和文件数据库的同步
2016-06-14 17:45:37由于sqlite对多进程操作支持效果不太理想,在项目中,为了避免频繁读写 文件数据库带来的性能损耗,我们可以采用操作sqlite内存数据库,并将内存数据库定时同步到文件数据库中的方法。 实现思路如下: 1、创建文件...