关闭

Sqlite语句和CoreData

标签: sqlite
455人阅读 评论(1) 收藏 举报
分类:

Sqlite3的简单SQL语句

创建表

CREATE TABLE Test (name varchar(100), age integer);

判断表是否存在,不存在才会创建

CREATE TABLE IF NOT EXISTS  Test (name varchar(100), age integer)

查询表

SELECT * FROM Test;

条件查询表

SELECT * FROM Test WHERE age =  '18';

插入语句

INSERT INTO Test VALUES('小明', 18);

修改语句

UPDATE Test SET age = '28' WHERE name = '小红;

删除语句

DELETE FROM Test WHERE name = ‘小花'

coreData提供ORM(Object Relationships Mapping)解决方案,能直接生成对应的model对象文件,并且封装了一些底层操作,简化了使用,而sqlite要使用c调用对应的api,并进行一些底层的封装操作,且model对象文件要自己写过,代码量会稍大一些,其他感觉差不太多。

        后面查了些资料,简单总结下:

首先,coredata和sqlite的概念不同,core为对象周期管理,而sqlite为dbms。
下面的讨论以使用core data来做数据持久化并使用sqlite做backend存储的情况为前提。

  1. 使用方便性。实际上,一个成熟的工程中一定是对数据持久化进行了封装的,因此底层使用的到底是core data还是sqlite,不应该被业务逻辑开发者关心。因此,即使习惯写SQL查询的人,也应该避免在业务逻辑中直接编写SQL语句。
  2. 存储性能,在写入性能上,因为都是使用的sqlite格式作为磁盘存储格式,因此其性能是一样的,如果你觉得用core data写的慢,很可能是你用sqlite的时候写的每条数据的内容没有core data时多,或者是你批量写入的时候每写入一条就调用了一次save。
  3. 查询性能,core data因为要兼容多种后端格式,因此查询时,其可用的语句比直接使用sqlite少,因此有些fetch实际上不是在sqlite中执行的。但这样未必会降低查询效率。因为iPhone的flash memory速度还是很快的。我的经验是大部分时候,在内存不是很紧张时,直接fetch一个entity的所有数据然后在内存中做filter往往比使用predicate在fetch时过滤更快。如果你觉的查询慢,很可能是查询方式有问题,可以把core data的debug模式打开,看一下到底执行了多少SQL语句,相信其中大部分是可以通过改写core data的调用方式避免的。
  4. core data的一个比较大的痛点是多人合作开发的时候,管理coredata的模型需要很小心,尤其是合并的时候,他的data model是XML格式的,手动resolve比较烦心。
  5. core data还有其他sql所不具备的优点,比如对undo的支持,多个context实现sketchbook类似的功能。为ManagedObject优化的row cash等。
  6. 另外core data是支持多线程的,但需要thread confinement的方式实现,使用了多线程之后可以最大化的防止阻塞主线程。

1
0
查看评论

coredata与sqlite之间的区别和联系

iOS 转载 sqlite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录, 修改记录, 表格之间也可以建立联系。   这个过程出现了, 表格的结构(schema), 所有表格的结构和相互联系构成整个数据库的模型, 数...
  • qq_19697705
  • qq_19697705
  • 2015-04-03 10:04
  • 1645

iOS 持久化存储之CoreData VS 直接SQlite

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS SDK详解专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html前言: CoreData不是DB,也不是DBMS,它是一个...
  • Hello_Hwc
  • Hello_Hwc
  • 2015-07-12 11:03
  • 6967

sqlite与coreData的简单比较

前些时日,面试一家公司,对方的面试考官问我对于这两个区别有什么看法。以前项目里边只顾着写,没想太多,简单的答复 coreData提供ORM(Object Relationships Mapping)解决方案,能直接生成对应的model对象文件,并且封装了一些底层操作,简化了使用,而sqlite要使用...
  • zhang7761
  • zhang7761
  • 2015-03-27 11:33
  • 1144

CoreData 与 SQLite 比较

CoreData.framework : iOS中提供了对原始SQLite数据库API访问的封装,通过这个framework来管理数据缓存和持久数据要比使用SQL语句操作SQLite数据库简单和方便许多。 机制:通过framework来存储和查询数据只需要使用framework提供的类就可以...
  • hyugahinat
  • hyugahinat
  • 2015-05-07 20:08
  • 844

iOS SQLite、CoreData、FMDB数据库详解

在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库。例如前面IOS开发系列—Objective-C之Foundation框架的文章中提到归档、plist文件存储,包括偏好设置其本质都是存储为文件,只是说归档或者plist文件存储可以选择保存到沙盒中,而偏好设置系统已经...
  • LiChang719
  • LiChang719
  • 2015-07-30 16:10
  • 2575

core data 的NSDate 属性类型和sqlite3的timestamp字段类型之间的相互转换

core data直接支持NSDate类型的属性,在iOS里确实使用很方便。有时候我们需要在其他程序里直接访问sqlite文件,这一属性在底层的sqlite文件里是映射为Timestamp字段的。但是直接select出来这个字段并转换成Date类型,就会发现转换回来的日期出错了。举个列子,用pyth...
  • sirchenhua
  • sirchenhua
  • 2012-03-06 13:03
  • 7499

Core data 数据分开存储 并简单加密

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (persistentStoreCoordinator_ != nil) { return persistentStoreCoordinator_; } per...
  • majiakun1
  • majiakun1
  • 2014-01-12 23:50
  • 1870

关于CoreData和SQLite多线程访问时的线程安全问题

关于CoreData和SQLite多线程访问时的线程安全问题数据库读取操作一般都是多线程访问的。在对数据进行读取时,我们要保证其当前状态不能被修改,即读取时加锁,否则就会出现数据错误混乱。 IOS中常用的两种数据持久化存储方式:CoreData和SQLite,两者都需要设置线程安全,在这里以FMD...
  • hanangellove
  • hanangellove
  • 2015-04-09 22:24
  • 5038

iOS中的数据库 sqlite与coreData 的一些特点

coredata 的特征,及自己在数据存储方面的理解
  • iosBluevip
  • iosBluevip
  • 2015-12-05 16:24
  • 341

Core Data容易出现的错误

1、2015-08-24 15:52:17.674 Tasks[3189:144763] CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///Users/zhumin/Library...
  • u012496940
  • u012496940
  • 2015-08-24 19:16
  • 1088
    个人资料
    • 访问:72587次
    • 积分:1463
    • 等级:
    • 排名:千里之外
    • 原创:77篇
    • 转载:0篇
    • 译文:0篇
    • 评论:4条
    文章分类
    最新评论