sqlite3中針對objective-c的持久層框架

sqlite3中針對objective-c的持久層框架

2010-04-19, Posted in Objective-c, 軟件開發 | 7 回覆


Cocoa與CocoaTouch(主要是指iphone,ipad,ipod等等)都對sqlite3提供了良好的支持,但objective-c語言中的sqlite3持久層框架確沒有java中那樣豐富與強大、靈活,直到我發現sqlitepersistentobjects這個框架。這個框架利用反射機制與valueobjects的完美結合,對sqlite3進行了非常輕量級的對象封裝(這點有點像我2007年時寫的一個java持久層框架,過些時候我整理一下,開源出來),使用者在編程過程中,基本不用再寫sql語句,也不需要再手工生成sqlite3數據庫文件。你所關心的,就是值對象繼承一個核心類,然後添加值對像的屬性,實際他就是一款Objective-C實現的ActiveRecord–Rails社區紅透半邊天的ORM模式。

一、sqlite persistent objects的下載與安裝

sqlitepersistentobjects是google code上的一個開源項目,大家可以出下載它,本項目地址是:http://code.google.com/p/sqlitepersistentobjects/

下載後,得到的源碼包src內的源文件,copy到自己的項目中,建議最好新建一個分類(new group)見注1,與其它源碼分離開來,便於管理.然後再工程中添加”libsqlite3.dylib”庫。見注2

二、sqlite persistent objects的使用

在使用前,我們先了解一下他是怎麼工作的,首先要創建一個Objective-C類,這個類只需要繼承自“SQLitePersistentObject”,然後,添加您想要持久化的Objective-C2.0屬性。當這個類被實例化後,調用”save”方法,會自動保存到數據庫中。每一個“SQLitePersistentObject”的子類都會擁有數據庫中對應的一張表。每一個屬性(不包括集合類型,像,NSDictionary,NSArray,NSSet或這些類的可變類型)都會持久化到表中相應字段中。屬性中如果含有指針對象是”SQLitePersistentObject”實例,也將會在關聯表裏新添條記錄。注意,這裏的屬性必須是實現“NSCoding”的對象,如NSDate,NSString,NSData,NSMutableData,NSNumber與NSObject,而c-string,void pointer, strutct 或union它們不是對象,將不會支持。但所有的數字(int,float等)都會保存在應的字段上。

我們簡單要來做一個例子,定義一個類Person,繼承SQLitePersistentObject,把這個類的屬性保存到數據庫中,代碼如下:

#import
#import “SQLitePersistentObject.h”
//Person.m的生成略,大家都應該知道的
@interface Person : SQLitePersistentObject {
NSString *iName;
int iAge;
}
@property (nonatomic, retain) NSString * iName;
@property (nonatomic) int iAge;
@end

生成類文件後,在其它使用的類中創建實例:

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

調用”save”方法,保存到數據庫中:

[person save];

加載表中的數據也相當的簡單。任何一個”Person”類都有多個提供查詢的類方法。例如,你可以查詢所有姓“lee”的人:

NSArray *people = [Person findByIName:@"'lee%'"];//這裏實際有點像like語句,where iName like 'lee%'

或者更靈活的使用SQL查詢條件:

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

注意大寫字母區分的情況用下劃線代替(ActiveRecord的慣例)。”findByCriteria:”返回一個NSArray數組,”findFirstByCriteria:”返回一個對象。

如果要更新,當然這裏先要查詢出來需要更新的對象,然後修改對象的值並保存就可以了,這裏不再詳寫。



=========================================================

注1、Xcode界面中,右鍵點擊Classes目錄,選擇“Add > NewGroup”,命名爲SQLitePersistentObject。右鍵點擊新建的“SQLitePersistentObject”目錄,選擇“Add > ExistingFiles”,將解壓縮出來的src目錄下所有文件導入。

注2、請右鍵點擊左部菜單中的”Frameworks”目錄,選擇 “Add > ExistingFrameworks…”,然後在本地目錄中選擇“/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.2.sdk/usr/lib/”,找到“libsqlite3.0.dylib”文件並雙擊。一個彈出窗口將出現,點擊其中“Add”按鈕將庫添加入項目中。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章