iOSFMDB和CoreData

转发:http://wenku.baidu.com/link?url=LSPSZSPxN4pVwWNwqEXSoY0-jlnXq-_14C7qV1FV9_gFIMPjdKlXrG4Nrh_08EZS10IcYm3syaulljwJ0djvOjePa8Hl9Rq1GvZv50yz7bi

FMDB是用于进行数据存储的第三方的框架,它与SQLite与Core Data相比较,存在很多优势。

FMDB是面向对象的,它以OC的方式封装了SQLite的C语言API,使用起来更加的方便,不需要过多的关心数据库操作的知识。但是它本身也存在一些问题,比如跨平台,因为它是用oc的语言封装的,所以只能在ios开发的时候使用,如果想实现跨平台的操作,来降低开发的成本和维护的成本,就需要使用比较原始的SQLite。

Core Data是ORM的一种体现,使用Core Data需要用到模型数据的转化,虽然操作简单,不需要直接操作数据库,但是性能没有直接使用SQLite高。但是SQLite使用的时候需要使用c语言中的函数,操作比较麻烦,因此需要对它进行封装。但是如果只是简单地封装,很可能会忽略很多重要的细节,比如如何处理并发以及安全性更问题。

因此,在这里推荐使用第三方框架FMDB,它是对libsqlite3框架的封装,用起来的步骤与SQLite使用类似,并且它对于多线程的同时操作一个表格时进行了处理,也就意味着它是线程安全的。FMDB是轻量级的框架,使用灵活,它是很多企业开发的首选。
FMDB中重要的类

FMDatabase:一个FMDatabase对象就代表一个单独的SQLite数据库,用来执行SQL语句

FMResultSet:使用FMDatabase执行查询后的结果集

FMDatabaseQueue:用于在多线程中执行多个查询或更新,它是线程安全的

FMDB使用步骤

1. 下载FMDB文件 fmdb下载地址 ,将FMDB文件夹添加到项目中

2. 导入sqlite框架,导入FMDatabase.h文件

3.与SQLite使用步骤类似,需要获取数据库文件路径,然后获得数据库,并打开数据库,然后数据库进行操作,最后关闭数据库。代码如下所示:

1. // ViewController.m

2. // JRFMDB

3. //

4. // Created by jerehedu on 15/6/18.

5. // Copyright (c) 2015年 jerehedu. All rights reserved.

6. //

  1. 7.

8. #import "ViewController.h"

9. #import "FMDatabase.h"

    1. @interface ViewController ()
    2. @property (nonatomic, strong) FMDatabase *db;
    3. @end
    4. @implementation ViewController
    5. - (void)viewDidLoad
    6. {
    7. [super viewDidLoad];
    8. //导入sqlite框架,导入FMDB文件夹
    9. //1.获得数据库文件的路径
    10. NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    11. NSString *fileName=[doc stringByAppendingPathComponent:@"student.sqlite"];
    12. NSLog(@"fileName = %@",fileName);
    13. //2.获得数据库
    14. FMDatabase *db = [FMDatabase databaseWithPath:fileName];
    15. //3.打开数据库
    16. if ([db open]) {
    17. NSLog(@"ok");
    18. //4.创表
    19. BOOL result=[db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
    20. if (result) {
    21. NSLog(@"创表成功");
    22. }else{
    23. NSLog(@"创表失败");
    24. }
    25. }
    26. self.db=db;
    27. //插入数据
    28. [self insertStu];
    29. [self deleteStu:6];
    30. [self updateStu:@"apple7_name" :@"7777"];
    31. [self queryStu];
    32. [self dropStu];
    33. [self insertStu];
    34. [self queryStu];
    35. //6.关闭数据库
    36. [self.db close];
    37. }
    38. #pragma mark 插入数据
    39. -(void)insertStu
    40. {
    41. for (int i=0; i<10; i++)
    42. {
    43. NSString *name = [NSString stringWithFormat:@"1apple%i_name",i];
    44. int age = arc4random()%3+20;
    45. //1. executeUpdate : 不确定的参数用?来占位 (后面参数必须都是oc对象)
    46. [self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?,?);",name,@(age)];
    47. //2. executeUpdateWithFormat : 不确定的参数用%@、%d等来占位 (参数为原始数据类型)
    48. // [self.db executeUpdateWithFormat:@"insert into t_student (name, age) values (%@, %i);",name,age];
    49. //3. 数组
    50. // [self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?,?);" withArgumentsInArray:@[name,@(age)]];
    51. }
    52. }
    53. #pragma mark 删除数据
    54. -(void)deleteStu:(int)idNum
    55. {
    56. //a. executeUpdate : 不确定的参数用?来占位 (后面参数必须都是oc对象)
    57. // [self.db executeUpdate:@"delete from t_student where id=?;",@(idNum)];
    58. //b. executeUpdateWithFormat : 不确定的参数用%@、%d等来占位
    59. // [self.db executeUpdateWithFormat:@"delete from t_student where name=%@;",@"apple9_name"];
    60. }
    61. #pragma mark 销毁表格
    62. -(void)dropStu
    63. {
    64. [self.db executeUpdate:@"drop table if exists t_student;"];
    65. //4.创表
    66. BOOL result=[self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
    67. if (result) {
    68. NSLog(@"再次创表成功");
    69. }else{
    70. NSLog(@"再次创表失败");
    71. }
    72. }
    73. #pragma mark 修改数据
    74. -(void)updateStu:(NSString *)oldName :(NSString*)newName
    75. {
    76. // [self.db executeUpdateWithFormat:@"update t_student set name=%@ where name=%@;",newName,oldName];
    77. [self.db executeUpdate:@"update t_student set name=? where name=?",newName,oldName];
    78. }
    79. #pragma mark 查询数据
    80. -(void)queryStu
    81. {
    82. //1.执行查询语句
    83. // FMResultSet *resultSet = [self.db executeQuery:@"select * from t_student;"];
    84. FMResultSet *resultSet = [self.db executeQuery:@"select * from t_student where id<?;",@(14)];
    85. //2.遍历结果集合
    86. while ([resultSet next]) {
    87. int idNum = [resultSet intForColumn:@"id"];
    88. NSString *name = [resultSet objectForColumnName:@"name"];
    89. int age = [resultSet intForColumn:@"age"];
    90. NSLog(@"id=%i ,name=%@, age=%i",idNum,name,age);
    91. }
    92. }
    93. - (void)didReceiveMemoryWarning
    94. {
    95. [super didReceiveMemoryWarning];
    96. // Dispose of any resources that can be recreated.
    97. }
    98. @end
时间: 2024-10-24 23:11:45

iOSFMDB和CoreData的相关文章

coredata 的基本使用(转载)

CoreData提供了一种简便的对象持久化管理方法,使你可以不用关心数据的存储,只需要关心对象的增加.删除.更改.读写. 基本概念托管对象(managed object)一个托管对象代表你想要保存到数据存储中的一个对象.这在概念上类似于SQL中的一条记录, 并且通常也包含一些域,这些域对应于你想要保存的对象的属性. 数据存储(data store)Core Data支持4中类型的数据存储:SQLiteStore, XMLStore, BinaryStore, InMemoryStore. 托管对

Playground 你不知道的小技巧, CoreData 的使用

Playground 的出现无疑是大大的提高了开发效率,可以节省大量的编译时间. 这里介绍在 Playground 中使用 CoreData 的小技巧. 我们新建一个工程 iOS 项目工程. 点击 File -> New -> File , 在工程中新建文件 Data Model 文件  在 model 中添加一个 Entitle,如下图  编译工程后,在 Product 选择生成的 .app 文件,找到该目录,如下图  查看包中的文件,如图  可以看到一个 Mode.momd 文件, 如图 

IOS中CoreData浅析

CoreData简介: 什么是CoreData? Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数据操作期间,我们不需要编写任何SQL语句 CoreData 不能执行SQL语句 取而代之,操作的是对象.而常用的三方库 FMDB SQLite 可以直接SQL语句 CoreData和数据库有什么区别? CoreData是一个苹果原生的框架,它拥有像数

CoreData数据库

CoreData与Sqlite的比较 Sqlite:1.基于C接口,需要使用sql语句,代码繁琐 2.在处理大量数据时,表关系更直观 3.在OC中不是可视化的 CoreData:1.可视化,有undo/redo能力 2.可以实现多种文件格式NSSQLiteStoreType.NSBinaryStoreType.NSInMemoryStoreType,NSXMLStoreType 3.苹果官方API支持,与iOS结合更紧密 CoreData核心类关系: NSManagedObjectContext

CoreData __ 基本原理

操作过程 Context想要获取值,先要告诉连接器,我要什么东西 链接器再告诉store, 你给我什么东西, store去找 找到之后返回给链接器,链接器再返回给Context          CoreData和sqlite的区别 CoreData是一个框架;sqlite是苹果使用别人开发好的一个动态库,本质是关系型数据库. CoreData是IOS平台下的一个数据持久化的方式;sqlite可以跨平台使用. 实现思路 首先找到CoreData文件夹 创建Person类,并且建立name属性 C

CoreData

CoreData 是什么? Core Data 是一个模型层的技术.Core Data 帮助你建立代表程序状态的模型层.Core Data 也是一种持久化技术,它能将模型对象的状态持久化到磁盘,但它最重要的特点是:Core Data 不仅是一个加载.保存数据的框架,它还能和内存中的数据很好的共事 Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数据

coredata xmpp

CoreData数据库   好处: 1.表可视化  2.使用简单 3.可以与谓词搭配使用     缺点: 1.不适合处理数据结构   比较复杂的数据 数据结构和算法 NSURLSession Editor ->  Add Model Version  在CoreData添加新模型版本 XMPP                cacoapods 与git  之前都是短链接 http     websevice soap  推送, 要经过 服务器—>  Apns   -> app  长链接:

iOS:CoreData数据库的使用四(数据库和UITableViewController以及NSFetchedResultsController一起使用)

CoreData数据库虽然可以和tableview或者UITableViewController一起使用将数据显示在表格上,但是在准备数据的时候,这种方式需要用一个可变数组来装从数据库一次性取出来的所有数据,然后通过操作这个数组来显示数据再表格上,从内存的优化和性能上来说并不是很好:这里,介绍一种新的抓取数据的方式,苹果公司为了进一步优化内存,创建了一个从数据库抓取数据的控制器NSFetchedResultsController,它能从CoreData中一批一批的抓取数据并存放起来,然后通过操作

iOS:CoreData数据库的使用三(数据库和tableView表格一起使用)

CoreData数据库是用来持久性存储数据的,那么,我们再从该数据库中取出数据干什么呢?明显的是为了对数据做操作,这个过程中可以将它们直观的显示出来,即通过表格的形式显示出来.CoreData配合tableView一起使用,是很常用的一种方式,直观.清晰明了. 下面就来具体的举个例子: 要求:将数据库中的数据显示在表格中,并且可以进行删除.插入等一些操作. 前期的具体步骤: 1.创建项目时,勾选Use Core Data,生成CoreData_____.xcdatamodel文件: 2.点击Co