日期:2014-05-16  浏览次数:20500 次

iPhone开发之数据库使用

iPhone开发之数据库使用

转载自 http://blog.sina.com.cn/s/blog_615db9540100eidu.html

?

由于第一个iPhone程序就使用到了数据库,所以首先来说下iPhone数据库的使用。iPhone使用的是sqlite数据库,我用了firefox的插件Sqlite Manager来管理sqlite,这个插件很好用,可以很方便的进行视图化的创建以及管理sqlite。废话不多说,进入正题。
要使用sqlite首先要在Frameworks中引入libsqlite3.0.dylib这个文件,具体步骤我就略过了,然后创建数据库,建好后将数据库添加到Resources目录下(记得勾选Copy items into ...这个选项),现在准备工作都已经做好,下面进入代码编写。
为了方便使用,以及以后的维护,我在这里创建了一个类将数据库的相关代码进行了封装。创建一个NSObject类,我在这里取名为GADatabase,然后在实现文件中添加以下代码:
#import <sqlite3.h>

id getColValue(sqlite3_stmt *stmt,int iCol) {
??? int type = sqlite3_column_type(stmt, iCol);
??? switch (type) {
??? ??? case SQLITE_INTEGER:
??? ??? ??? return [NSNumber numberWithInt:sqlite3_column_int(stmt, iCol)];
??? ??? ??? break;
??? ??? case SQLITE_FLOAT:
??? ??? ??? return [NSNumber numberWithDouble:sqlite3_column_double(stmt, iCol)];
??? ??? ??? break;
??? ??? case SQLITE_TEXT:
??? ??? ??? return [NSString stringWithUTF8String:sqlite3_column_text(stmt, iCol)];
??? ??? ??? break;
??? ??? case SQLITE_BLOB:
??? ??? ??? return [NSData dataWithBytes:sqlite3_column_blob(stmt, iCol) length:sqlite3_column_bytes(stmt, iCol)];
??? ??? ??? break;
??? ??? case SQLITE_NULL:
??? ??? ??? return @"";
??? ??? ??? break;
??? ??? default:
??? ??? ??? return @"NONE";
??? ??? ??? break;
??? }
}

在这里,我使用了C风格的定义,并且定义在了@implementation之外以方便使用,有了这个函数在以后的数据提取时很方便,其中的数据类型可根 据实际情况进行增减。OK,现在在@implementation与@end之间添加下面的代码以获取iphone中sqlite的地址:
+ (NSString *)pathForDatabase {
??? NSArray *arrayOfPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
??? NSString *path = [arrayOfPaths objectAtIndex:0];
??? path = [path stringByAppendingPathComponent:@"yourDatabaseName.sqlite"];
???
??? NSLog(path);
???
??? NSFileManager *fileManager = [NSFileManager defaultManager];