2012年6月30日 星期六

FMDB

首先當然是先下載FMDB的SDK

並且加入libsqlite3.0.dylib的framework
然後按照我的習慣會做成一個DB的singleton方便使用

首先是.h檔

#import <Foundation/Foundation.h>
#import "FMDatabase.h"

@interface DBData : NSObject
@property (nonatomic) FMDatabase* db;
  
+(DBData *)getInstance;   
-(FMDatabase *)loadDB:(NSString *)dbName;  
@end
接著是.m檔

#import "DBData.h"

@implementation DBData
@synthesize db;

static DBData *instance = nil;   
 
+(DBData *)getInstance   
{   
    @synchronized(self)    
    {   
        if (instance == nil)    
        {   
            instance = [[self alloc] init];   
        }   
    }   
    return instance;   
}   
   
-(FMDatabase* )loadDB:(NSString *)dbName   
{   
    NSURL *appUrl = [[[NSFileManager defaultManager] 
                      URLsForDirectory:NSDocumentDirectory 
                      inDomains:NSUserDomainMask] lastObject];
    NSString *dbPath = [[appUrl path] stringByAppendingPathComponent:@"MyDatabase.db"];   
    db = [FMDatabase databaseWithPath:dbPath];
    
    if (![db open]) {       
        NSLog(@"Could not open db");       
    }
    else
    {
        NSLog(@"open db Success");
    }       
    
    return db;   
}  
@end
都準備好了之後,就可以在程式的各處使用了
在要使用DB的.h加上這兩行

#import "DBData.h"

@interface Search : UIViewController 
{
    DBData *instance;    
    FMDatabase *db; 
}
要使用的.m檔如下,這是新增的範例
instance = [DBData getInstance];   
db = [instance loadDB:@"MyDatabase.db"];
            
FMResultSet *rs = [db executeQuery:@"SELECT name, description from MyDB WHERE name = ?",name];
            
if ([rs next])
{       
  NSString *name = [rs stringForColumn:@"name"];       
  NSString *description = [rs stringForColumn:@"description"];       
}
else
{         
  if(![db executeUpdate:@"INSERT INTO MyInfo (name, description) VALUES (?,?)", name, @"strong"])
  {
    [self displayAlertViewMsg:@"新增我的最愛失敗" andTitle:nil];
  }
  else
  {
    [self displayAlertViewMsg:@"新增我的最愛成功" andTitle:nil];
  }
}

沒有留言:

張貼留言