原文链接:http://blog.csdn.net/dboylx/archive/2009/03/24/4019402.aspx
iPhone开发包中有对SQLite的类库支持,但它是C接口,而且API麻烦的要死。当然,你可能会做些封装使它更好用些。但如果我告诉你这里
有个更好用的ORM,还是ActiveRecord的,你会不会高兴的发疯呢?它就是“SQLite Persistent
Objects”,一款Objective-C实现的ActiveRecord。
Rails社区红透半边天的ORM模式。简单就是它最大特色,并不像某些ORM一味执着于纯OO的高贵血统,不计成本的实现华丽且优雅的ORM。在
Rails社区里流传着这样一句话:“除了JAVA社区的工程师,很少有人拿着一千页的《轻松学XXX》会觉得很高兴”(^_^)。当然,我们的
ActiveRecord也不缺传统ORM实现:事务,类型转换,校验,表连接,对象子父关系。但它是轻量级的,除此以外更允许你直接用SQL。
ActiveRecord已经把SQL按动词切开(像select, from , joins , where , group by , order
by),真对一个Model的查询只需要修改你所关注的部分,让我们可以化复杂为简单,化简单为更简单。
在理想的世界里,我们所有Objective-C数据对象都知道如何自己保存与加载数据。我们调用了对象“save”方法后它就已经被保存起来,当我们需要加载数据时,只是简单的调用类方法来获取想要的数据,复杂查询也不排斥直接用SQL(但返回结果依然是对象)。
做了什么?
创建一个Objective-C类,它知道怎样把数据持久化到SQLite数据库上。不仅如此,它还隐藏了所有的实现细节:甚至不需要创建数据库与
表,或其它任何额外工作。类只需要继承自“SQLitePersistentObject”,然后,添加您想要持久化的Objective-C2.0属
性。当这个类被实例化后,调用”save”方法,会自动保存到数据库中。
它怎么工作的?
每一个“SQLitePersistentObject”的子类都会拥有数据库中对应的一张表。每一个属性(不包括集合类型,
像,NSDictionary,NSArray,NSSet或这些类的可变类型)都会持久化到表中相应字段中。属性中如果含有指针对象
是”SQLitePersistentObject”实例,也将会在关联表里新添条记录。
所有的属性都会保存么?
答案是否定的,当前并不支持c-string,voidpointer,
strutct或union。但所有的数字(int,float等)都会保存在应的字段上。任何实现“NSCoding”(类似JAVA中的序列化接
口,但它需要自己实现,而JAVA只是标志型接口)接口的对象都可以保存在数据库中。已经支持的类
型:NSDate,NSString,NSData,NSMutableData,NSNumber与NSObject。
那些没有持久化支持的类,会用NSObject的持久机制,它会用”NSKeyedArchiver”把它归档为BLOB并保存在数据库里。
怎样使用?
把本项目的所有文档添加到你的项目中,添加”libsqlite3.dylib”库,接着声名你的模型类。
#import<foundation/foundation.h>
#import“SQLitePersistentObject.h”
@interfacePersistablePerson :SQLitePersistentObject
{
NSString*lastName;
NSString*firstName;
}
@property(nonatomic, retain)NSString* lastName;
@property(nonatomic, retain)NSString* firstName;
@end
生成类文件后,创建实例:
PersistablePerson *person = [[PersistablePersonalloc]init];
person.firstName =@”Joe”;
person.lastName =@”Smith”;
调用”save”方法,保存到数据库中:
[personsave];
加载表中的数据也相当的简单。任何一个”Persistable”类都有多个提供查询的类方法。例如,你可以查询所有姓“Smith”的人:
NSArray*people = [PersistablePerson findByLastName
:@"Smith"]
或者更灵活的使用SQL查询条件:
PeristablePerson *joeSmith = [PersistablePerson findFirstByCriteria
:@"WHERE last_name = 'Smith' AND first_name = 'Joe'];
注意大写字母区分的情况用下划线代替(ActiveRecord的惯例)。”findByCriteria:”返回一个NSArray数组,”findFirstByCriteria:”返回一个对象。
更多资料:
http://code.google.com/p/pldatabase/
翻译自:
http://iphonedevelopment.blogspot.com/2008/08/sqlite-persistent-objects.html
分享到:
相关推荐
sqlite persistent objects iphone数据库操作源码sqlite persistent objects iphone数据库操作源码sqlite persistent objects iphone数据库操作源码
一个使用SQLite3来进行数据持久操作的例子,本来是应该和前面的资源一起传上来的,不小心漏掉了,于是单独传吧。感觉这个用赶来比core data方便很多啊,sql语句的使用也很方便。
Android 系统提供了三种方式来实现数据持久化,即文件存储、SharedPreference 存储、数据库存储。本文主要介绍数据库存储方式,即 Android 内置的 SQLite 数据库。
iOS中有五种持久化数据的方式:属性列表、对象归档、NSUserDefaults、SQLite3和Core Data。 本文介绍对象归档来持久化数据。归档的作用就是将对象以文件的形式保存到磁盘中,以使得数据序列化和持久化。 使用归档的...
iOS中有五种持久化数据的方式:属性列表、对象归档、NSUserDefault、SQLite3和Core Data 本文章讲述通过属性列表的方式持久化数据,这个方法也是我们平时最经常用到的方式。比如应用程序的配置和个性化的设置,一般...
实例中包含三种保持数据的方法,第一种:实用属性列表,第二种:对象归档,第三种:使用Iphone的嵌入式数据库(SQLite3),让你对数据持久化有一个更全面的认识。
里面对于Sqlite3数据库2进制数据进行了详细的解析和对于大部分常用Sqlite3的接口函数做了一定的总结。对于2进制数据eg图片的操作有实例源代码提供。
今天在向Sqlite数据库里插入数据的时候,报了这样一个错: 代码如下: “too many terms in compound SELECT” 去Stackoverflow上查了一下,发现有人回答这个问题:链接 原来一次性向数据库里插入数据的条数不能太...
可以实现html5直接连接SQLITE数据库{内附SQLITE可视化软件},利用浏览器打开html文件加javascript 直接对sqlite数据库进行插入 修改 删除 查询等功能,非常适合轻量化的系统设计,同时对于认识html5及本地数据库有...
网上收集的sqlite避免重复插入数据。
其实过程很简单:首先要获取SQLite数据(当然首先你要创建一个SQLite数据库并填写了一些数据),然后引入ListView控件,最后将数据和ListView绑定就好了。 一 获取SQLite数据库中的数据 SQLite是一个轻量级的数据库...
Navicat_for_SQLite_11.0.10 SQLite3数据库可视化管理工具 无需安装,解压缩即可直接使用。绿色版。
本文实例讲述了Android数据持久化之SQLite数据库用法。分享给大家供大家参考,具体如下: 这一节我将总结一下android中的另一种数据存储——SQLite 的相关知识点 SQLite数据库是android系统自带的,主要用到的类包括...
SQLite3中的数据类型
iOS中有五种持久化数据的方式:属性列表、对象归档、NSUserDefaults、SQLite3和Core Data NSUserDefaults官方文档介绍: NSUserDefaults类为和默认系统类交互提供了一种编程接口。默认系统允许应用程序去定制其行为...
sqlite高性能插入数据
编写SQLite工具类,创建SQLite数据库,并添加数据;查询数据,展示到listview
一直找不到的好资源,需要WIN10下实现 ODBC链接数据SQLite的可以下载,亲测可用。 1、下载后解压到 c:\czggws目录里。 2、运行目录里的sqliteOdbcInstallx32.reg 3、打开C:\Windows\SysWOW64\odbcad32.exe 这个是32...
Sqlite数据库可视化工具,支持中文 支持导出数据格式:csv、html、plain、sql、xml 可同时打开多个数据库文件
vba导出sqlite中需要筛选的数据