首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

老司机出品——数据持久化之基于FMDB的ORM数据库设计

---- 归解档 相对于前两种方法,归解档这种方法更适应于模型等特殊数据类型的持久化。想要归解档,你的模型首先要遵循协议。然后在需要归档或解档的地方直接调用对应方法即可。...---- 数据库及其扩展封装 在iOS中,默认是携带sqlite3数据库的。 我们先来看看sqlite3是什么?...SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。...iOS FMDB库详解 他的优势在于他将增删改三个操作都抽象成update方法,查抽象成query方法,在使用上API十分简洁。短板就在于你还是要针对不同模型去组装不同的sql语句。...完犊子 ---- 那么有没有一款不用考虑sql语句,你用考虑映射关系,数据迁移一步到位的基于sqlite3的数据库方案呢?当然是有的,要不然老司机为什么在这白话了3618个字符。

1.2K30

iOS开发之SQLite--C语言接口规范(五)——iOS开发使用SQLite实例

本篇博客就使用前面操作SQLite的知识来实现如何去插入,删除和更新数据。然后再把操作SQlite数据库常用的方法进行一个封装。...把常用方法进行封装后,把Cars数据库中的其中一个表的数据进行查询,并在UITableView上进行展示。...在之前的博客中我们只进行了查询操作,所以从Bundle加载数据库资源文件是可行的。   ...     下面的接口是打开数据库功能,把数据库的名字传入如(Cars.sqlite),返回的是一个sqlite3的对象,你可以通过这个对象来对打开的数据库进行操作。...在这个方法中,先去沙盒中查看是否有该数据库,如果有就直接打开。如果没有就从Bundle中把数据库资源复制到沙盒中,然后再从沙盒中打开。你要知道在Bundle中是无法去更改数据库中的数据的。

1.8K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    学习iPhone开发中 sqlite3的

    由于我主要负责我们小组项目数据库模块的部分所以这几天都一直在研究在iphone中最为常用的一个简单数据库sqlite,自己也搜集很多资料,因此在这里总结一下这几天的学习成果: 1.Sqlite...SQLite顾名思议是以 SQL为基础的数据库软件,SQL是一套强大的数据库语言,主要概念是由「数据库」、「资料表」(table)、「查询指令」(queries)等单元组 成的「关联性数据库」(进一步的概念可参考网络上各种关于...SQL为什么这么流行了:这种语言允许你将各种查询条件组合在一起──而我们还没提到「跨数据库的联合查询」呢!)...   sqlite3 film.db < output.sql 在大量插入资料时,你可能会需要先打这个指令: begin; 插入完资料后要记得打这个指令,资料才会写进数据库中: commit...iphone开发-SQLite数据库使用 我现在要使用SQLite3.0创建一个数据库,然后在数据库中创建一个表格。 首先要引入SQLite3.0的lib库。

    92410

    CC++ 通过SQLiteSDK增删改查

    SQLite 不需要一个独立的数据库服务器进程,所有的操作都是直接在存储在文件中的数据库上执行。...轻量级: SQLite 是一个轻量级的数据库,相对于一些其他数据库管理系统来说,它的内存占用和资源消耗相对较小。...自给自足: SQLite 数据库是一个单一的磁盘文件,整个数据库被存储在一个文件中,这使得备份、复制或传输数据库变得非常容易。...SQLite 数据库以其独特的自给自足特性脱颖而出,整个数据库被存储在一个单一的磁盘文件中,使得备份、复制或传输数据库变得异常简单。...sqlite3_step 函数用于执行由 sqlite3_prepare_v2 预编译的 SQL 语句。在执行过程中,可以通过不断调用 sqlite3_step 来逐行获取查询结果,直到结果集结束。

    39610

    Android学习--持久化(三) SQLite & LitePal

    SQLite & LitePal ----     自己做为一个iOS开发,看到安卓这一块的时候,那中浓烈的熟悉味道更加强烈,SQLite这种轻量级的关系型数据库的使用在移动端相差不多,iOS有FMDB...SQLite ----       一:SQLite的创建       Android为了让我们更加方便的管理数据库,专门提供了一个SQLiteOpenHelper的抽象类,这意味的我们要是想使用它的话就得我们创建一个类去继承它...简单啊,我们在创建的表的方法onCreate()里面添加一条创建表的语句就可以了啊,仔细想象这样真的可以吗?其实是不行的,因为你已经存在的数据库是没办法在走onCreate方法的, 那怎么办?...年的杰作,三年后在github上有了一个更新,故来学习一番,没想到还挺好用,这里做下笔记。...它的使用:       关于它的映射类这部分的类容我们和关于它CRUD的操作依据里面的注意事项就直接上代码,把他们放在代码中说:       映射类的创建就不说了,你自己创建一个java类,添加变量重写

    80230

    移动客户端中高效使用 SQLite

    避免 App 开发过程中可能遇到的坑,也提供一些在开发过程中通过大量实践和数据对比后总结出的一些参数设置。整篇文章将以一个个具体的技术点作为讲解单元,从 SQLite 数据库生命周期起始讲解到其终结。...SQLite 存储等长的 int int64 BOOL 等数据时,page 可以优化对齐地址存储更多的数据。...我们就可以分析出性能到底还有没有可以优化的空间。尽量减少扫描数据表的次数、尽量扫描索引表而非原始表,做好与数据库体积的平衡。让好的索引加快你程序的运行。 2....FTS 表略微不同的是,它的行号叫 docid,并且是可以用 SQL 语句访问的。我们一般会用字符串在原始表中的行号作为这里的 docid。...这里的做法是讲数组数据用 JSON 序列化后,已 VARCHAR 或者 BLOB 的形式存成一列,和其他的数据放在同一个数据表当中。 5.

    5.5K70

    从FMDB到WCDB、微信团队怎么说?

    的都知道,就像Android开发中使用LitePal一样,都是在SQLite的基础上封装的移动数据库框架,WCDB是微信团队提供一个高效、易用、完整的移动端存储方案。 ...      一:关系型数据库,代表有CoreData、FMDB等       CoreData:微信团队在公众号的文章中对它的总结是这样:它是苹果内建框架,和Xcode深度结合,可以很方便进行ORM;...SQLite本不是一个易用的组件:为了完成一个查询,往往我们需要写很多拼接字符串、组装Object的胶水代码。这些代码冗长繁杂,而且容易出错,我们希望组件能统一完成这些任务。...完整;数据库操作是一个复杂的场景,我们希望数据库组件能完整覆盖各种场景。包括数据库损坏、监控统计、复杂的查询、反注入等。...CRUD的操作,在说下面之前,我们扯一点其他的,不知道会不会有人不知道该怎样去查看你建立的数据库内容,这里说推荐一个我自己一直在用的挺好用的工具 -- Navicat Premium ,你可以点击它去下载

    2.2K90

    Kaggle八项大奖斩获其6:用于筛选和分析文献的paperai

    主办方准备了一个庞大的文献数据库,包含了20多万篇学术论文,其中有10万余篇是与COVID-19相关的研究。 该比赛希望全世界AI专家使用文本挖掘工具,来完成比赛中的各类任务。...句嵌入索引分析CORD-19 简单来说就是,该模型就是句嵌入索引和带有文章的SQLite数据库的组合。 首先,每篇文章都被解析成句子,并与文章元数据一起存储在SQLite中。...SQLite本身就具有虚拟表模块FTS5,可以进行全文搜索。 这个全文搜索引擎,允许用户在大量文档集合中高效地搜索包含一个或多个搜索词。...BM25是一个词袋检索功能,它根据每个文档中出现的查询词对一组文档进行排序。 最后,开发者选择使用FastText为每个标记检索单词嵌入。为了构建句子嵌入,嵌入可以被平均在一起以创建单个嵌入向量。...最后,检索出来句子,会通过过TextRank算法进行分析和运行,以便在最终的报告中,以高亮的形式框出。 以上图为例,在目标进行检索后,系统会输出文献的基本信息,如日期、研究方向、期刊等。

    44720

    YYCache 源码剖析:一览亮点

    在日常开发业务使用中,多是直接操作 YYCache 类,该类是对内存缓存功能和磁盘缓存功能的一个简单封装。...磁盘缓存的核心类是 YYKVStorage,注意该类是非线程安全的,它主要封装了 SQLite 数据库的操作和文件存储操作。 后文的剖析大部分的代码都是在 YYKVStorage 文件中。...filename 文件名,它指向直接存文件情况下的文件名,具体交互请往下看~ 如何实现 SQLite 结合文件存储 这一个重点问题,就像之前说的,在某个临界值时,直接读取文件的效率要高于从数据库读取,第一反应可能是写文件和写数据库分离...(5)YYDiskCache 对 YYKVStorage 的二次封装 对于 YYKVStorage 的公有方法,笔者不做解析,就是对数据库操作和写文件操作的一个结合封装,很简单一看便知。...,若查不到,就查询磁盘缓存 _diskCache ,查询磁盘缓存成功,将数据同步到内存缓存中,方便下次查找。

    1.5K61

    Mybatis系列全解(一):手写一套持久层框架

    Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。...毕竟,曾有人说过:想了解一个人,就得先仔细了解Ta的工作。 [鲁迅爷爷] 二、JDBC如何工作? --- JDBC API 允许应用程序访问任何形式的表格数据,特别是存储在关系数据库中的数据。...设置入参执行SQL: 为了防止SQL注入,我们使用预处理在sql中使用?作为输入参数的占位符,sql在编译后成为安全的sql语句再进行查询(有缘我们可以聊聊为何预处理机制能防止SQL注入)。...我们通过一段简单的例子来演示一下使用流程,本例子使用JDBC操作mysql数据库,先看看我们最终的项目结构与JDBC API在JDK中rt.jar的结构: 项目结构: [项目结构] JDBC API在JDK...就是整个JDBC操作数据库的使用过程繁琐而尴尬,就如这场对话: [用户使用原始JDBC日常] 额… JDBC你确实挺烦的。 我懂你需要和数据库建立连接、执行SQL语句、处理查询结果集...

    73310

    FreeSql.DbContext ,向"不是真正的 ORM" 说拜拜

    目前定义的规则如下: 文字规则略显复杂,后边有代码演示,以及图文介绍在 sqlite 和 sqlserver 下的测试过程。...,会立即打包【执行队列】,避免没有提交的数据,影响查询结果 ctx.SaveChanges(); //打包【执行队列】,提交事务} 在 sqlite 测试 ?...在 sqlserver 测试 其实大致与 sqlite 下相同,唯一的区别在于 AddRange 的处理方式,如图: ?...当插入单条时,采用了第一行代码的 SQL 命令; 当批量插入时,采用了后面看上去复杂的 SQL 命令; 所有传入的实体属性值在执行完成后,都会更新; 特别说明 FreeSql.DbContext 目前仍处于研究开发阶段...但是我们也有自己的特点,不是吗?我们可以做到多种数据库使用习惯的一致性,这点 EFCore 目前是没有办法解决的难题。 从细节出发,我们的口号是:做 .NETCore 最方便的 ORM!

    1.4K10

    FreeSql.DbContext ,向"不是真正的 ORM" 说拜拜

    目前定义的规则如下: 文字规则略显复杂,后边有代码演示,以及图文介绍在 sqlite 和 sqlserver 下的测试过程。...,会立即打包【执行队列】,避免没有提交的数据,影响查询结果 ctx.SaveChanges(); //打包【执行队列】,提交事务} 在 sqlite 测试 ?...在 sqlserver 测试 其实大致与 sqlite 下相同,唯一的区别在于 AddRange 的处理方式,如图: ?...当插入单条时,采用了第一行代码的 SQL 命令; 当批量插入时,采用了后面看上去复杂的 SQL 命令; 所有传入的实体属性值在执行完成后,都会更新; 特别说明 FreeSql.DbContext 目前仍处于研究开发阶段...但是我们也有自己的特点,不是吗?我们可以做到多种数据库使用习惯的一致性,这点 EFCore 目前是没有办法解决的难题。 从细节出发,我们的口号是:做 .NETCore 最方便的 ORM!

    1K30

    SQLite数据库实现数据增删改查

    与传统的客户端/服务器模式不同,SQLite引擎不是一个独立的进程,而是被集成在一个应用程序中。应用程序可以访问SQLite数据库文件,读写其中的数据,从而实现数据的存储和管理。...以下是 SQLite 数据库的特点: 轻量级:SQLite 占用资源较小,运行速度快,并且可以很方便地集成到应用程序中,使其成为一个内嵌的数据库。...三、在Qt里使用SQLITE数据库 在 Qt 中,使用 SQLite 数据库的主要流程如下: (1)导入 SQLite 相关库文件:在 Qt 项目中,需要先导入 SQLite 相关的库文件和头文件,以便在代码中使用...(2)创建数据库连接:使用 QSqlDatabase 类可以在 Qt 中创建一个数据库连接。需要设置数据库类型(如 "QSQLITE"),以及数据库文件路径等参数。...(3)打开数据库:使用 QSqlDatabase 类的 open 函数可以打开数据库连接。在成功打开数据库后,可以执行 SQL 查询语句,读取和修改数据库中的数据。

    37640

    Qt(C++)使用SQLite数据库完成数据增删改查

    与传统的客户端/服务器模式不同,SQLite引擎不是一个独立的进程,而是被集成在一个应用程序中。应用程序可以访问SQLite数据库文件,读写其中的数据,从而实现数据的存储和管理。...以下是 SQLite 数据库的特点: 轻量级:SQLite 占用资源较小,运行速度快,并且可以很方便地集成到应用程序中,使其成为一个内嵌的数据库。...三、在Qt里使用SQLITE数据库 在 Qt 中,使用 SQLite 数据库的主要流程如下: (1)导入 SQLite 相关库文件:在 Qt 项目中,需要先导入 SQLite 相关的库文件和头文件,以便在代码中使用...(2)创建数据库连接:使用 QSqlDatabase 类可以在 Qt 中创建一个数据库连接。需要设置数据库类型(如 “QSQLITE”),以及数据库文件路径等参数。...(3)打开数据库:使用 QSqlDatabase 类的 open 函数可以打开数据库连接。在成功打开数据库后,可以执行 SQL 查询语句,读取和修改数据库中的数据。

    1.2K60

    Sqlite3详细解读

    当心,在你创建好一个表之后,你不能向表中添加 BIT型字段。如果你打算在一个表中包含BIT型字段,你必须在创建表时完成。 5....,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。...整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。...第五个参数为一个函数指针,SQLITE3执行完操作后回调此函数,通常用于释放字符串占用的内存。...每次sqlite3_step得到一个结果集的列停下后,这个过程就可以被多次调用去查询这个行的各列的值。

    3.7K10

    iOS面试题梳理(二)

    因为使用 KVC 键值编码,它必须先解析字符串,然后在设置或者访问对象的实例变量。 键值观察(KVO): 1.键值观察机制是一种能使得对象获取到其他对象属性变化的通知 ,极大的简化了代码。...当我们调用一个静态方法时,需要对对象进行 release 吗不需要,静态方法(类方法)创建一个对象时,对象已被放入自动释放池。在自动释放池被释放时,很有可能被销毁。...它不是一个数据库,不仅可以使用SQLite数据库来保持数据,也可以使用其他的方式来存储数据。如:XML。...提供的是对象-关系映射功能,也就是说,CoreData可以将Objective-C对象转换成数据,保存到SQL中,然后将保存后的数据还原成OC对象。...2.将对象数据存储在SQLite数据库已获得性能优化。

    1.2K101

    MySQL实战第二十四讲-MySQL是怎么保证主备一致的?

    今天我就正式地和你介绍一下它。 毫不夸张地说,MySQL 能够成为现下最流行的开源数据库,binlog 功不可没。 在最开始,MySQL 是以容易学习和方便的高可用架构,被开发人员青睐的。...在状态 1 中,虽然节点 B 没有被直接访问,但是我依然建议你把节点 B(也就是备库)设置成只读(readonly)模式。这样做,有以下几个考虑: 1. ...最后一行是一个 COMMIT。你可以看到里面写着 xid=61。你还记得这个 XID 是做什么用的吗?如果记忆模糊了,可以再回顾一下 第15 篇 文章中的相关内容。...但是,双 M 结构还有一个问题需要解决。 业务逻辑在节点 A 上更新了一条语句,然后再把生成的 binlog 发给节点 B,节点 B 执行完这条更新语句后也会生成 binlog。...你能构造出一个这样的场景吗?又应该怎么解决呢? 问题解答: 一种场景是,在一个主库更新事务后,用命令 set global server_id=x 修改了 server_id。

    46140
    领券