http://5secheaven.blogspot.com/2010/03/iphone-sqlite-persistent-object.html
SQLite Persistent Object能做什么:
任何继承SQLitePersistentObject的子类都将在SQLite数据库中创建一个对应的数据库表,对象本身可以完成存储功能,并且这些数据库操作的实现都会被隐藏起来,你不需要自己创建数据库、表,除了维护数据对象以外,不需要做其他任何事情。
SQLite Persistent Object是如何工作的:
除了集合类(NSDictionary, NSArray, NSSet 或 mutable 变量)以外的Objective-C 2.0属性:都将存储为数据库表中的一列。
指向同为SQLitePersistentObject子类对象的指针型属性:将被存储为指向相应子类对象纪录的关键字列。
集合类属性:集合类将被存储为数据库子表。
实例:
1. 创建项目
首先在Xcode中选择创建一个新的“ Window-Based Application”。输入项目名称"SQLitePODemo"
2. 将SQLite框架和 PersonDatabas数据库导入项目
请右键点击左部菜单中的"Frameworks"目录,选择 “Add > Existing Frameworks…”,然后在本地目录中选择“/Developer/Platforms/iPhoneOS.platform/Developer /SDKs/iPhoneOS3.0.sdk/usr/lib/”,找到“libsqlite3.0.dylib”文件并双击。一个弹出窗口将出现,点击其中“Add”按钮将库添加入项目中。
3. 将SQLite Persistent Object库导入项目
在http://code.google.com/p/sqlitepersistentobjects/downloads/list下载最新的sqlitepersistentobject包,当前最新版本为 sqlitepersistentobjects_02_26_2009_snapshot.zip, 发布时间为February 26,2009。
在本地解压缩压缩包,得到多个文件夹,其中src目录下所有文件既为我们所需要导入的库文件。
Xcode界面中,右键点击Classes目录,选择“Add > New Group”,命名为SQLitePersistentObject。
右键点击新建的 “SQLitePersistentObject”目录,选择“Add > Existing Files”,将sqlitepersistentobjects_02_26_2009_snapshot.zip解压缩出来的src目录下所有文件导入。
4. 开始编程
修改Other Sources/main.m为:
#import <UIKit/UIKit.h>
#import "SQLitePersistentObject.h"
#import "SQLiteInstanceManager.h";
//define subclass Person extends SQLitePersistentObject
@interface Person : SQLitePersistentObject {
NSString *name;
NSString *title;
NSString *iconURL;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *iconURL;
@end
@implementation Person
@synthesize name,title,iconURL;
- (void)dealloc
{
[name release];
[title release];
[iconURL release];
[super dealloc];
}
@end
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
//initial SQLiteInstanceManager
[[SQLiteInstanceManager sharedManager] setDatabaseFilepath:@"test.db"];
//create and save Person object
Person *person = [[[Person alloc] init] autorelease];
person.name = @"Wilson Lee";
person.title = @"Developer";
person.iconURL = @"demodir/test.jpg";
[person save];
//find Person records from database by name.
NSArray *people = [[Person findByName:@"Wilson Lee"] autorelease];
for (Person *tmpPerson in people) {
//print out database infomation.
NSLog(@"record pk:%d. You can see %@ %@'s icon at %@", tmpPerson.pk, tmpPerson.title, tmpPerson.name, tmpPerson.iconURL);
//change the database.
tmpPerson.title = @"Manager";
[tmpPerson save];
//[tmpPerson deleteObject];
//object found by "findByXX" function was set autoreleased. We don't need to release it again.
}
//find all Person records.
NSArray *people2 = [[Person allObjects] autorelease];
for (Person *tmpPerson in people2) {
//print out database infomation.
NSLog(@"record pk:%d. You can see %@ %@'s icon at %@", tmpPerson.pk, tmpPerson.title, tmpPerson.name, tmpPerson.iconURL);
//delete current object from database.
[tmpPerson deleteObject];
}
//print out record count.
NSLog(@"There are %d Person objects in database", [Person count]);
[pool release];
return 0;
}
在这里,我们创建了一个继承SQLitePersistentObject的Person子类。在main中,调用类消息对其进行了增/删/改/查几个不同的数据库操作。
5. 编译执行
完成修改后,运行“Build > Build and Run”, 关掉弹出的iPhone Simulator窗口,选择"Run > Console" 打开控制台,可看到如下输出信息。
其中纪录的pk值会随每次运行的不同而改变。
--欢迎转载, 请注明出处http://5secheaven.blogspot.com/2010/03/iphone-sqlite-persistent-object.html--
(终)
没有评论:
发表评论