sqlitepersistentobject

1、项目地址:http://code.google.com/p/sqlitepersistentobjects/;

2、如何引入项目中:将Src目录下的文件复制到自己的项目中,并链接到libsqlite3.dylib库文件;

3、如何使用它:

1)、定义类

#import <foundation/foundation.h>
#import "SQLitePersistentObject.h"

@interface PersistablePerson : SQLitePersistentObject {
NSString *lastName;
NSString *firstName;
}
@property (nonatomic, retain) NSString * lastName;
@property (nonatomic, retain) NSString * firstName;
@end

2)、在代码中使用它

PersistablePerson *person = [[PersistablePerson alloc] init];
person.firstName = @"Joe";
person.lastName = @"Smith";
[person save];//保存到数据库中
NSArray *people = [PersistablePerson findByLastName:@"Smith"]//从数据库中查询LastName="Smith"的记录
PeristablePerson *joeSmith = [PersistablePerson findFirstByCriteria:@"WHERE last_name = ‘Smith‘ AND first_name = ‘Joe‘];//从数据库中查询lastName="Smith"并且firstName= ‘Joe‘的记录

当查询的条件只有一个时,可以使用类方法“findBy属性名”来查找相关记录。当需要对多个属性进行查询的时候,就需要使用类方法“ findFirstByCriteria”来查找,其参数所使用的字段名称为实际数据库表中的字段名,而不是类中声明的属性名。

4、使用索引

在自己定义的类中重载类方法indices,定义一个返回数组元素的数组。

+(NSArray *)indices;

定义:

+(NSArray *)indices
{
 NSArray *index1 = [NSArray arrayWithObject:@"lastName"];
 NSArray *index2 = [NSArray arrayWithObjects:@"lastName", @"firstName", nil];
 NSArray *index3 = [NSArray arrayWithObjects:@"age", @"lastName", @"firstName", nil];
 return [NSArray arrayWithObjects:index1, index2, index3, nil];
}

5、如何标记transient属性

所谓transient就是只在类中使用而不被持久化到数据库中的属性。跟标记索引差不多,需要重载类方法transients方法,返回一个字符串数组。例如:

+(NSArray *)transients
{
  return [NSArray arrayWithObject:@"transientNumber"];
}

6、查找关联表

使用SQLitePersistentObject对象作为属性,可以表现“主-从”表关系,如下代码:

//代码详见SQLitePersistentObject自带的Sample Code\SimpleConsoleText //Class Post @interface Post : SQLitePersistentObject {     NSString *title;     NSString *text;     NSString *transientBit; } @property (nonatomic,readwrite,retain) NSString *title; @property (nonatomic,readwrite,retain) NSString *text; @property (nonatomic,readwrite,retain) NSString *transientBit; @end;  //Class PostComment  @class Post; @interface PostComment : SQLitePersistentObject {     NSString *title;     Post *post; } @property (nonatomic,readwrite,retain) NSString *title; @property (nonatomic,readwrite,retain) Post *post; @end;  //使用     Post *p = [[Post alloc] init];     p.title = @"Test post 1";     p.text = @"text";         if ([p existsInDB] == NO) LOG(@"Confirmed not in DB yet");     [p save];      PostComment *co = [[PostComment alloc] init];     co.title = @"Comment 1 to Post 2";     co.post = p;     [co save];         [p release];         [co release];  //查找Post所有的从表         Post *p = [Post findByPK:1];     for(PostComment *co in [p findRelated:[PostComment class]]) {         LOG(@"\t\t%@", co);     }  //访问PostComment的主表         PostComment *co = [PostComment findByPK:1];         NSLog(@"%@",co.post.text)

需要注意的是:当Post和PostComment的数据都被修改后,主表Post保存时并不会保存从表PostComment的数据,但从表Postcomment保存时,会同时保存主表Post的数据。

7、使用clearCache

在某个SQLitePersistentObject子类被直接或间接被引用时候,它会将相关联的表中数据加载到内存中,所以当数据很多的时候会长期占用 一部分内存,为了节省内存,可以在某些类不再被使用的时候,利用类方法clearCache来清除内存中驻留的表数据。clearCache函数实现代码 也是相当简单,如下:

+ (void)clearCache {   if(objectMap != nil)     [objectMap removeAllObjects];      if(checkedTables != nil)     [checkedTables removeAllObjects];    }

8、其它

1)、它会在内存中维护一个所有持久化对象有映射,所有持久化对象不会被多次加载,如果要实现不同的持久话实例的话,需要在持久化类中实现NSCopying接口。

2)、目前没有rollback方法。

3)、SQLitePersistentObject未使用私有非正式的类库。

时间: 2024-08-03 14:18:37

sqlitepersistentobject的相关文章

自己总结的 iOS ,Mac 开源项目以及库,知识点------持续更新

自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常棒,所以好东西要分享,为啥用 CN 博客,有个好处,可以随时修改,可以持续更新,不用每次都要再发表,感觉这样棒棒的 我们 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.

iOS开发 非常全的三方库、插件、大牛博客等等

UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看"使用方法". (国人写) XHRefreshControl- XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHo

iOS、mac开源项目及库汇总

UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看“使用方法”. (国人写) XHRefreshControl – XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHou

数据持久化 技术比较

  [数据存储]coredata.sqlite.fmdb和sqlitepersistentobject 管理提醒: 本帖被 angellixf 从 OS X开发讨论区 移动到本区(2014-02-12) 分享类型:应用开发相关 在ios开发过程中,经常需要用到数据持久化工作.对于基本的配置信息等,NSUserDefault已经可以满足要求,但是对于大部分需要存储的信息,主要的方式有coredata建模或者sqlite写数据库的方法进行存储.现在针对coredata.sqlite以及常用的sqli

最全面的iOS和Mac开源项目和第三方库汇总

UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看“使用方法”. (国人写) XHRefreshControl – XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHou

iOS开发之资料收集

github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自github:https://github.com/Tim9Liu9/TimLiu-iOS UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者

iOS、mac开源项目及库(感谢原作者的分享)

目录 模糊效果 富文本 表相关 HUD与Toast 其他UI 其他动画 网络测试 网络聊天 Model 数据库 PDF 摄像照相视频音频处理 消息相关 消息推送服务器端 版本新API的Demo 测试及调试 完整项目 Xcode插件 开发资源 swift 中文开发博客列表 具体内容 ============================= UI 下拉刷新 MJRefresh - 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下

Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)

下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看“使用方法”. (国人写) XHRefreshControl - XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHouseR

iOS学习资源收集

https://github.com/Tim9Liu9/TimLiu-iOS 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.com/search 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 动画 侧滑与右滑返回手势 gif动画 其他动画 网络相关 网络连接 图像获取 网络