Objective-c中Sqlite3持久層框架是本文要介紹的內容,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
- #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:」返回一個對象。
若是要更新,固然這裏先要查詢出來須要更新的對象,而後修改對象的值並保存就能夠了,這裏再也不詳寫。
注一、Xcode界面中,右鍵點擊Classes目錄,選擇「Add > New Group」,命名爲SQLitePersistentObject。右鍵點擊新建的 「SQLitePersistentObject」目錄,選擇「Add > Existing Files」,將解壓縮出來的src目錄下全部文件導入。
注二、請右鍵點擊左部菜單中的」Frameworks」目錄,選擇 「Add > Existing Frameworks…」,而後在本地目錄中選擇
- /Developer/Platforms/iPhoneOS.platform/Developer /SDKs/iPhoneOS3.1.2.sdk/usr/lib/
找到「libsqlite3.0.dylib」文件並雙擊。一個彈出窗口將出現,點擊其中「Add」按鈕將庫添加入項目中。