Objective-C中Sqlite3持久层框架

Objective-cSqlite3持久层框架是本文要介绍的内容,Cocoa与Cocoa Touch(主要是指iphone,ipad,ipod等等)都对sqlite3提供了良好的支持,但objective-c语言中的sqlite3持久层框架确没有java中那样丰富与强大、灵活,直到我发现sqlitepersistentobjects这个框架java

这个框架利用反射机制与value objects的完美结合,对sqlite3进行了很是轻量级的对象封装(这点有点像我2007年时写的一个java持久层框架,过些时候我整理一下,开源出来),使用者在编程过程当中,基本不用再写sql语句,也不须要再手工生成sqlite3数据库文件。你所关心的,就是值对象继承一个核心类,而后添加值对像的属性,实际他就是一款Objective-C实现的ActiveRecord–Rails社区红透半边天的ORM模式。 objective-c

1、sqlite persistent objects的下载与安装 sql

sqlitepersistentobjects是google code上的一个开源项目,你们能够出下载它,本项目地址是:http://code.google.com/p/sqlitepersistentobjects/ 数据库

下载后,获得的源码包src内的源文件,copy到本身的项目中,建议最好新建一个分类(new group)见注1,与其它源码分离开来,便于管理.而后再工程中添加”libsqlite3.dylib”库。见注2 编程

2、sqlite persistent objects的使用 数组

在使用前,咱们先了解一下他是怎么工做的,首先要建立一个Objective-C类,这个类只须要继承自“SQLitePersistentObject”,而后,添加您想要持久化的Objective-C 2.0属性。当这个类被实例化后,调用”save”方法,会自动保存到数据库中。 框架

每个“SQLitePersistentObject”的子类都会拥有数据库中对应的一张表。每个属性(不包括集合类型,像,NSDictionary,NSArray,NSSet或这些类的可变类型)都会持久化到表中相应字段中。属性中若是含有指针对象是”SQLitePersistentObject”实例,也将会在关联表里新添条记录。 iphone

注意,这里的属性必须是实现“NSCoding”的对象,如NSDate,NSString,NSData,NSMutableData,NSNumber与NSObject,而c-string,void pointer, strutct 或 union它们不是对象,将不会支持。但全部的数字(int,float等)都会保存在应的字段上。 google

咱们简单要来作一个例子,定义一个类Person,继承SQLitePersistentObject,把这个类的属性保存到数据库中,代码以下: atom

 
  1. #import  
  2. #import “SQLitePersistentObject.h”  
  3.  
  4. //Person.m的生成略,你们都应该知道的  
  5.  
  6. @interface Person : SQLitePersistentObject {  
  7. NSString *iName;  
  8. int iAge;  
  9. }  
  10. @property (nonatomic, retain) NSString * iName;  
  11. @property (nonatomic) int iAge;  
  12. @end 

生成类文件后,在其它使用的类中建立实例:

 
  1. Person *person = [[Person alloc] init];  
  2. person.iName = @”leeguoli”;  
  3. person.iAge = 20

调用”save”方法,保存到数据库中:

 
  1. [person save]; 

加载表中的数据也至关的简单。任何一个”Person”类都有多个提供查询的类方法。例如,你能够查询全部姓“lee”的人:

 
  1. NSArray *people = [Person findByIName:@"'lee%'"];//这里实际有点像like语句,where iName like 'lee%' 

或者更灵活的使用SQL查询条件:

 
  1. Person *leeguoli = [Person findFirstByCriteria:@"WHERE i_name = 'leeguoli' AND i_age = 20]; 

注意大写字母区分的状况用下划线代替(ActiveRecord的惯例)。”findByCriteria:”返回一个NSArray数组,”findFirstByCriteria:”返回一个对象。

若是要更新,固然这里先要查询出来须要更新的对象,而后修改对象的值并保存就能够了,这里再也不详写。

注一、Xcode界面中,右键点击Classes目录,选择“Add > New Group”,命名为SQLitePersistentObject。右键点击新建的 “SQLitePersistentObject”目录,选择“Add > Existing Files”,将解压缩出来的src目录下全部文件导入。

注二、请右键点击左部菜单中的”Frameworks”目录,选择 “Add > Existing Frameworks…”,而后在本地目录中选择

 
  1. /Developer/Platforms/iPhoneOS.platform/Developer /SDKs/iPhoneOS3.1.2.sdk/usr/lib/ 

找到“libsqlite3.0.dylib”文件并双击。一个弹出窗口将出现,点击其中“Add”按钮将库添加入项目中。

相关文章
相关标签/搜索