FMDB iphone数据库

FMDB提供了用Objective-c封装的访问sqlite3的方法,避免了在用Objective-c编程中夹杂C风格的代码(不是说不能使用,而是夹杂在一块代码风格不一致)。
https://github.com/ccgus/fmdb
#import  "FMDatabase.h"
#import "FMDatabaseAdditions.h"
 
@class FMDatabase;
 
@interface SqliteInterface : NSObject {
     NSString *dbRealPath;
     FMDatabase *dbo;
}
 
@property (nonatomic, retain) NSString *dbRealPath;
@property (nonatomic, retain) FMDatabase *dbo;
 
+ (SqliteInterface *)sharedSqliteInterface;
- (void) connectDB;
- (void) closeDB;
- (void) setupDB : (NSString *)dbFileName;
 
@end
 
/
SqliteInterface.m
 
#import "SqliteInterface.h"
#import "CommonDefines.h"
 
@implementation SqliteInterface
 
@synthesize dbRealPath, dbo;
 
static SqliteInterface *sharedSqliteInterface;
 
+ (SqliteInterface *)sharedSqliteInterface
{
     if (!sharedSqliteInterface) {
         sharedSqliteInterface = [[SqliteInterface alloc] init];
     }
     return sharedSqliteInterface;
}
 
- (void) connectDB
{
     if (dbo == nil) {
         dbo = [[FMDatabase alloc] initWithPath:dbRealPath];
         if (! [dbo open]) {
             NSLog(@"Could not open database.");
         }
     }else {
         NSLog(@"Database has already opened.");
     }
}
 
- (void) closeDB
{
     [dbo close];
     BR_RELEASE(dbo);
}
 
- (void) setupDB:(NSString *)dbFileName
{
     if (dbFileName == nil) {
         return;
     }
 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
     NSString *documentsPath = [paths objectAtIndex:0];
     NSFileManager *fileManager = [NSFileManager defaultManager];
     NSError *err;
 
     dbRealPath = [documentsPath stringByAppendingString:[NSString stringWithFormat:@"/%@",dbFileName]];
 
     if (![fileManager fileExistsAtPath:dbRealPath]) {
         NSString *dbSrcPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:dbFileName];
         BOOL copySuccess = [fileManager copyItemAtPath:dbSrcPath toPath:dbRealPath error:&err];
 
         if (!copySuccess) {
             NSLog(@"Failed to copy database '%@'.", [err localizedDescription]);
         }
     }
     NSLog(@"dbRealPath:%@",dbRealPath);
}
@end
AppDelege.m
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 
     // Override point for customization after application launch.
 
     [[SqliteInterface sharedSqliteInterface] setupDB: @"xxxxx.sqlite"];
     [[SqliteInterface sharedSqliteInterface] connectDB];
}
///
最后,记得加入libsqlite3.dylib。然后加入对应的object和Model来对数据库操作。
 
#import "MarkedPageModel.h"
#import "SqliteInterface.h"
#import "CommonDefines.h"
 
@implementation MarkedPageModel
 
- (NSMutableArray *)getMarkedPages
{
     FMDatabase *dbo = [SqliteInterface sharedSqliteInterface].dbo;
     NSMutableArray *resultArray = nil;
 
     NSString *selectSql = @"SELECT * FROM markedPage";
     FMResultSet *rs = [dbo executeQuery:selectSql];
 
     while ([rs next]) {
         if (resultArray == nil) {
             resultArray = [[[NSMutableArray alloc] init] autorelease];
         }
         MarkedPageObject *markedPageObject = [[MarkedPageObject alloc] init];
         markedPageObject.markedPage = [rs intForColumn:@"markedPage"];
         markedPageObject.markedTime = [rs stringForColumn:@"markedTime"];
         markedPageObject.isMarked = [rs boolForColumn:@"isMarked"];
         [resultArray addObject:markedPageObject];
         BR_RELEASE(markedPageObject);
     }
     [rs close];
     return resultArray;
}
 
- (BOOL)AddMarkedPage:(int)page
            MarkedTime:(NSString *)time
              isMarked: (BOOL)marked
{
     FMDatabase *dbo = [SqliteInterface sharedSqliteInterface].dbo;
     NSString *selectSql = @"INSERT INTO markedPage (markedPage,markedTime,isMarked) VALUES (?,?,?)";
     return [dbo executeUpdate:selectSql
           withArgumentsInArray:[NSArray arrayWithObjects:
                                 [NSNumber numberWithInt:page], time, [NSNumber numberWithBool:marked],nil]];
}
 
- (BOOL)deleteMarkedPage:(int)page
{
     FMDatabase *dbo = [[SqliteInterface sharedSqliteInterface] dbo];
     NSString *deleteSql = @"DELETE FROM markedPage WHERE markedPage = ?";
     return [dbo executeUpdate:deleteSql withArgumentsInArray:[NSArray arrayWithObjects:
                                                               [NSNumber numberWithInt:page], nil]];
}
 
@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值