谈谈用SQLite和FMDB而不用Core Data
谈谈用SQLite和FMDB而不用Core Data
发布于:2014-04-22 11:22阅读数:4235
凭良心讲,我不能告诉你不去使用Core Data。它不错,而且也在变好,并且它被很多其他Cocoa开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要。 更重要的是,不
“”

来源:伯乐在线
凭良心讲,我不能告诉你不去使用Core Data。它不错,而且也在变好,并且它被很多其他Cocoa开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要。
| Mike Ash写到:就我自己而言,我不是个狂热粉丝。我发现API是笨拙的,并且框架本身对于大量的数据是极其缓慢的。 |
- -[VSDatabaseController runDatabaseBlockInTransaction:(VSDatabaseUpdateBlock)databaseBlock]
- typedef void (^VSDatabaseUpdateBlock)(FMDatabase *database);
- - (void)runDatabaseBlockInTransaction:(VSDatabaseUpdateBlock)databaseBlock {
- dispatch_async(self.serialDispatchQueue, ^{
- @autoreleasepool {
- [self beginTransaction];
- databaseBlock(self.database);
- [self endTransaction];
- }
- });
- }
- - (void)emptyTagsLookupTableForNote:(VSNote *)note {
- NSString *uniqueID = note.uniqueID;
- [self runDatabaseBlockInTransaction:^(FMDatabase *database) {
- [database executeUpdate:
- @"delete from tagsNotesLookup where noteUniqueID = ?;", uniqueID];
- }];
- }
- [self.database executeUpdate:
- @"CREATE INDEX if not exists noteUniqueIDIndex on tagsNotesLookup (noteUniqueID);"];
- -[VSDatabaseController runFetchForClass:(Class)databaseObjectClass
- fetchBlock:(VSDatabaseFetchBlock)fetchBlock
- fetchResultsBlock:(VSDatabaseFetchResultsBlock)fetchResultsBlock];
- FMResultSet *resultSet = fetchBlock(self.database);
- NSArray *fetchedObjects = [self databaseObjectsWithResultSet:resultSet
- class:databaseObjectClass];
- FMResultSet *resultSet = [self.database executeQuery:@"select uniqueID from some_table"];
- - (void)uploadNote:(VSNote *)note {
- VSNoteAPICall *apiCall = [[VSNoteAPICall alloc] initWithNote:[note detachedCopy]];
- [self enqueueAPICall:apiCall];
- }
- VSNote *cachedNote = [self.mapTable objectForKey:downloadedNote.uniqueID];
- [self.database executeUpdate:@"CREATE TABLE if not exists tags "
- "(uniqueID TEXT UNIQUE, name TEXT, deleted INTEGER, deletedModificationDate DATE);"];
- [self.database executeUpdate:@"CREATE INDEX if not exists "
- "archivedSortDateIndex on notes (archived, sortDate);"];
- [self.database executeUpdate:@"ALTER TABLE tags ADD deletedDate DATE"];
- CREATE TABLE if not exists tags
- (uniqueID TEXT UNIQUE, name TEXT, deleted INTEGER, deletedModificationDate DATE);
- CREATE INDEX if not exists tagNameIndex on tags (name);
- CREATE INDEX if not exists archivedSortDateIndex on notes (archived, sortDate);
- select distinct tagUniqueID from tagsNotesLookup where archived=0;
- sqlite> explain query plan select distinct tagUniqueID from tagsNotesLookup where archived=0;
- 0|0|0|SCAN TABLE tagsNotesLookup USING INDEX tagUniqueIDIndex (~100000 rows)
- CREATE INDEX archivedTagUniqueID on tagsNotesLookup(archived, tagUniqueID);
- sqlite> explain query plan select distinct tagUniqueID from tagsNotesLookup where archived=0;
- 0|0|0|SEARCH TABLE tagsNotesLookup USING COVERING INDEX archivedTagUniqueID (archived=?) (~10 rows)
- select displayName, key from items where UTTypeConformsTo(uti, ?) order by 2;
CocoaChina是全球最大的苹果开发中文社区,官方微信每日定时推送各种精彩的研发教程资源和工具,介绍app推广营销经验,最新企业招聘和外包信息,以及Cocos2d引擎、Cocos Studio开发工具包的最新动态及培训信息。关注微信可以第一时间了解最新产品和服务动态,微信在手,天下我有!
请搜索微信号“CocoaChina”关注我们!
谈谈用SQLite和FMDB而不用Core Data的更多相关文章
- 我为什么用 SQLite 和 FMDB 而不用 Core Data
凭良心讲,我不能告诉你不去使用Core Data.它不错,而且也在变好,并且它被很多其他Cocoa开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要.更重要的是,不值得花时间和 ...
- 用 SQLite 和 FMDB 替代 Core Data
本文转载至 http://blog.csdn.net/majiakun1/article/details/38680147 为什么我不使用Core Data Mike Ash 写到: 就个人而言,我不 ...
- SQLite与FMDB使用中区别
前几篇已经写完了SQLite与FMDB的基本内容以及衍生出来的知识点,我们这一篇主要讲述FMDB与SQLite在基本使用中的区别,大约需要5-10分钟时间讲述内容,欢迎大家指正. 基本使用区别 1.数 ...
- 工程日记之HelloSlide(3):如何使用Core Data数据库,以及和sqlite之间的对应关系
Core Data 和 SQLite 是什么关系 core data是对sqlite的封装,因为sqlite是c语言的api,然而有人也需要obj-c的api,所以有了core data ,另外,co ...
- 《驾驭Core Data》 第一章 Core Data概述
<驾驭Core Data>系列教程综合了<Core Data for iOS>,<Learning Core Data for iOS>,<Core Data ...
- 【转】深受开发者喜爱的10大Core Data工具和开源库
http://www.cocoachina.com/ios/20150902/13304.html 在iOS和OSX应用程序中存储和查询数据,Core Data是一个很好的选择.它不仅可以减少内存使用 ...
- Core Data & MagicalRecord
iOS 本地数据持久化存储: 1.plist 2.归档 3.NSUserDefaults 4.NSFileManager 5.数据库 一.CoreData概述 CoreData是苹果自带的管理数据库的 ...
- Core Data的那点事儿~
一.介绍下Core Data CoreData在早些年iOS开发中使用不多,因为其本身性能略低,以及不使用SQL语句而失去的灵活性,再加上FMDB之类封装SQLite的三方框架很好用,所以一直不受待见 ...
- Core Data浅谈初级入门
Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数 ...
随机推荐
- [转]MVC模式已死?何不试试MOVE
在36Kr看到一篇译文,主要是提出一些新的概念,升华老的MVC模式.看上很不错,转过来,做个记录. ========================= 华丽的分割线 ================= ...
- Codeforces 429B Working out
http://codeforces.com/contest/429/problem/B 题意:一个从左下到右上,一个从左上到右下,要求只相交一次,求整个路径和的最大值 思路:发现可以枚举交点,然后算到 ...
- Android Fragment getActivity返回null解决
在Android开发中,如果我们用到V4包里面的Fragment,在应用被切换到后台的时候,Activity可能被回收,但是创建的所有Fragment则会被保存到Bundle里面,下面是Fragmen ...
- ubuntu scp
一.将本机文件复制到远程服务器上 scp -r /Users/Dreamover/Desktop/jsnone dreamover@localserver:/var/www/project/ /Use ...
- pyqt之倒计时例子
from PyQt4.Qt import *from PyQt4.QtCore import *from PyQt4.QtGui import *import sysdef main(): a= ...
- (转)直接保存对象的数据库——db4o
在实际开发中,数据的存储是必不可少的,常用的有数据库存储和文件存储.数据库目前有关系型数据库和文档型数据库(No-SQL).关系型数据库以字段.类型.约束.表关系来存储和管理数据,比较常见的比如Ora ...
- MongoDB 操作手冊CRUD插入
插入操作 插入记录 1.插入一条记录 db.testData.insert({num:1,name:'a'}); 结果 WriteResult({ "nInserted" : 1 ...
- PHP 生成.csv 文件并下载到浏览器
近期做了一个项目须要把订单的信息显示出来.而且可以把相关信息放到一个.csv 文件里,下载到浏览器.首先我要说明的是.csv 文件,PHP 有专门的函数去解析该类型的文件,相关函数大家可以去官网查看. ...
- 代码实现Layout android:layout_alignParentRight
代码实现Layout android:layout_alignParentRight 例如: android:id="@+id/account_option" android:la ...
- oracle数据库常用查询一
oracle数据库常用查询一 sqlplus / as sysdba; 或sqlplus sys/密码 as sysdba;两者都是以sys登录.conn scott/tiger@orcl; conn ...