Objective-C中Sqlite3持久層框架
Objective-c中Sqlite3持久層框架是本文要介紹的內(nèi)容,Cocoa與Cocoa Touch(主要是指iphone,ipad,ipod等等)都對sqlite3提供了良好的支持,但objective-c語言中的sqlite3持久層框架確沒有java中那樣豐富與強(qiáng)大、靈活,直到我發(fā)現(xiàn)sqlitepersistentobjects這個(gè)框架。
這個(gè)框架利用反射機(jī)制與value objects的***結(jié)合,對sqlite3進(jìn)行了非常輕量級的對象封裝(這點(diǎn)有點(diǎn)像我2007年時(shí)寫的一個(gè)java持久層框架,過些時(shí)候我整理一下,開源出來),使用者在編程過程中,基本不用再寫sql語句,也不需要再手工生成sqlite3數(shù)據(jù)庫文件。你所關(guān)心的,就是值對象繼承一個(gè)核心類,然后添加值對像的屬性,實(shí)際他就是一款Objective-C實(shí)現(xiàn)的ActiveRecord–Rails社區(qū)紅透半邊天的ORM模式。
一、sqlite persistent objects的下載與安裝
sqlitepersistentobjects是google code上的一個(gè)開源項(xiàng)目,大家可以出下載它,本項(xiàng)目地址是:http://code.google.com/p/sqlitepersistentobjects/
下載后,得到的源碼包src內(nèi)的源文件,copy到自己的項(xiàng)目中,建議***新建一個(gè)分類(new group)見注1,與其它源碼分離開來,便于管理.然后再工程中添加”libsqlite3.dylib”庫。見注2
二、sqlite persistent objects的使用
在使用前,我們先了解一下他是怎么工作的,首先要?jiǎng)?chuàng)建一個(gè)Objective-C類,這個(gè)類只需要繼承自“SQLitePersistentObject”,然后,添加您想要持久化的Objective-C 2.0屬性。當(dāng)這個(gè)類被實(shí)例化后,調(diào)用”save”方法,會(huì)自動(dòng)保存到數(shù)據(jù)庫中。
每一個(gè)“SQLitePersistentObject”的子類都會(huì)擁有數(shù)據(jù)庫中對應(yīng)的一張表。每一個(gè)屬性(不包括集合類型,像,NSDictionary,NSArray,NSSet或這些類的可變類型)都會(huì)持久化到表中相應(yīng)字段中。屬性中如果含有指針對象是”SQLitePersistentObject”實(shí)例,也將會(huì)在關(guān)聯(lián)表里新添?xiàng)l記錄。
注意,這里的屬性必須是實(shí)現(xiàn)“NSCoding”的對象,如NSDate,NSString,NSData,NSMutableData,NSNumber與NSObject,而c-string,void pointer, strutct 或 union它們不是對象,將不會(huì)支持。但所有的數(shù)字(int,float等)都會(huì)保存在應(yīng)的字段上。
我們簡單要來做一個(gè)例子,定義一個(gè)類Person,繼承SQLitePersistentObject,把這個(gè)類的屬性保存到數(shù)據(jù)庫中,代碼如下:
- #import
- #import “SQLitePersistentObject.h”
- //Person.m的生成略,大家都應(yīng)該知道的
- @interface Person : SQLitePersistentObject {
- NSString *iName;
- int iAge;
- }
- @property (nonatomic, retain) NSString * iName;
- @property (nonatomic) int iAge;
- @end
生成類文件后,在其它使用的類中創(chuàng)建實(shí)例:
- Person *person = [[Person alloc] init];
- person.iName = @”leeguoli”;
- person.iAge = 20;
調(diào)用”save”方法,保存到數(shù)據(jù)庫中:
- [person save];
加載表中的數(shù)據(jù)也相當(dāng)?shù)暮唵巍H魏我粋€(gè)”Person”類都有多個(gè)提供查詢的類方法。例如,你可以查詢所有姓“lee”的人:
- NSArray *people = [Person findByIName:@"'lee%'"];//這里實(shí)際有點(diǎn)像like語句,where iName like 'lee%'
或者更靈活的使用SQL查詢條件:
- Person *leeguoli = [Person findFirstByCriteria:@"WHERE i_name = 'leeguoli' AND i_age = 20];
注意大寫字母區(qū)分的情況用下劃線代替(ActiveRecord的慣例)。”findByCriteria:”返回一個(gè)NSArray數(shù)組,”findFirstByCriteria:”返回一個(gè)對象。
如果要更新,當(dāng)然這里先要查詢出來需要更新的對象,然后修改對象的值并保存就可以了,這里不再詳寫。
注1、Xcode界面中,右鍵點(diǎn)擊Classes目錄,選擇“Add > New Group”,命名為SQLitePersistentObject。右鍵點(diǎn)擊新建的 “SQLitePersistentObject”目錄,選擇“Add > Existing Files”,將解壓縮出來的src目錄下所有文件導(dǎo)入。
注2、請右鍵點(diǎn)擊左部菜單中的”Frameworks”目錄,選擇 “Add > Existing Frameworks…”,然后在本地目錄中選擇
- /Developer/Platforms/iPhoneOS.platform/Developer /SDKs/iPhoneOS3.1.2.sdk/usr/lib/
找到“libsqlite3.0.dylib”文件并雙擊。一個(gè)彈出窗口將出現(xiàn),點(diǎn)擊其中“Add”按鈕將庫添加入項(xiàng)目中。
小結(jié):Objective-c中Sqlite3持久層框架的內(nèi)容介紹完了,希望本文對你有所幫助!