2010年3月28日星期日

iPhone编程二 SQLite Persistent Object

SQLite Persistent Object 是基于Objective-C语言的SQLite数据库永久对象储存项目,它使iPhone上的数据库开发变得非常简单。

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--

(终)

没有评论:

发表评论