FMDB 数据库简单用法

 

Model: 

#import <Foundation/Foundation.h>

@interface Player : NSObject

@property(nonatomic,assign) int playerId;
@property(nonatomic,strong) NSString *playerName;
@property(nonatomic,strong) NSString *team;

@end

#import "Player.h"

@implementation Player


- (NSString *)description{
 
    return [NSString stringWithFormat:@"id->%d-----球员名称->%@---球队名称-->%@",self.playerId,self.playerName,self.team];
}




@end


DAO:

   

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

@interface DataManager : NSObject

// 一个单一的SQLite数据库,用于执行SQL语句。
@property(nonatomic,strong) FMDatabase *dataBase;

// 执行查询一个FMDatabase结果集
@property(nonatomic,strong) FMResultSet *result;

// 在多个线程来执行查询和更新时会使用这个类。
@property(nonatomic,strong) FMDatabaseQueue *queue;


+ (DataManager *)sharedDataManager;

@end


#import "DataManager.h"


@implementation DataManager

+ (DataManager *)sharedDataManager{
    static DataManager *dataManager = nil;
    static dispatch_once_t  onceToken;
    dispatch_once(&onceToken, ^{
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
        NSString *path = [paths objectAtIndex:0];
        NSString *dataPath = [path stringByAppendingPathComponent:@"Player.db"];
        NSLog(@"%@",dataPath);
        FMDatabase *dataBase = [FMDatabase databaseWithPath:dataPath];
        NSString *sql = @"create table if not exists player(id integer primary key autoincrement,playerName text,team text)";
        if ([dataBase open]) {
            [dataBase setShouldCacheStatements:YES];
            [dataBase executeUpdate:sql];
        }else{
            NSLog(@"数据库创建失败");
        }
        dataManager = [[DataManager alloc] init];
        dataManager.dataBase = dataBase;
    });
    return dataManager;
}



@end



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

@interface PlayerDao : NSObject

@property(nonatomic,strong) FMDatabase *db;

+ (PlayerDao *) sharedIntance;

- (BOOL) addPlayer:(Player *)player;

- (BOOL) delPlayer:(Player *)player;

- (BOOL) findPlayer;

- (BOOL) updatePlayer:(Player *)player;



@end

#import "PlayerDao.h"
#import "DataManager.h"

#define TABLE  @"player"
#define PLAYER_NAME @"playerName"
#define PLAYER_TEAM @"team"
#define PLAYER_ID @"id";

//需要通过反射形式, 对表结构进行对象化处理不需要自己写太多的  列 这样的名称。    反射处理
@implementation PlayerDao

- (id)init{
    self = [super init];
    if (self) {
        self.db = [DataManager sharedDataManager].dataBase;
    }
    return self;
}

+ (PlayerDao *) sharedIntance{
    static PlayerDao *playDao;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        playDao = [[PlayerDao alloc] init];
    });
    return playDao;
}

- (BOOL) addPlayer:(Player *)player{
    bool  flag;
    NSString *sql = [NSString stringWithFormat:@"insert into %@('%@','%@') values ('%@','%@')",TABLE,PLAYER_NAME,PLAYER_TEAM,player.playerName,player.team];
    if ([self.db open]) {
        flag = [self.db executeUpdate:sql];
    }
    if (flag) {
        NSLog(@"数据插入成功!");
    }
    [self.db close];
    return flag;
}

- (BOOL) delPlayer:(Player *)player{
    bool  flag;
    NSString *sql = [NSString stringWithFormat:@"delete from %@ where %@ = %d" ,TABLE,@"id",player.playerId];
    if ([self.db open]) {
        flag = [self.db executeUpdate:sql];
    }
    if (flag) {
        NSLog(@"删除成功!");
    }
    [self.db close];
    return flag;
}

- (BOOL) findPlayer{
    NSMutableArray *array = [[NSMutableArray alloc] init];
    Player *player = nil;
    bool  flag;
    NSString *sql = [NSString stringWithFormat:@"select * from %@",TABLE];
    if ([self.db open]) {
        FMResultSet *result = [self.db executeQuery:sql];
        while ([result next]) {
            int playerId = [result intForColumn:@"id"];
            NSString *playerName = [result stringForColumn:PLAYER_NAME];
            NSString *playerTeam = [result stringForColumn:PLAYER_TEAM];
            player = [[Player alloc] init];
            player.playerName = playerName;
            player.team = playerTeam;
            player.playerId = playerId;
            [array addObject:player];
        }
        for (Player *player in array) {
            NSLog(@"查询数据结果:%@",player);
        }

    }
    [self.db close];
    return flag;
    
}

- (BOOL) updatePlayer:(Player *)player{
    bool  flag;
    NSString *sql = [NSString stringWithFormat:@"update %@  set %@ = '%@' where %@ = '%@' ", TABLE,PLAYER_TEAM,player.team,PLAYER_NAME,player.playerName];
    if ([self.db open]) {
        flag = [self.db executeUpdate:sql];
    }
    if (flag) {
        NSLog(@"修改成功!");
        [self.db close];
    }
    
    return flag;
}

@end

Controller:


#import "ViewController.h"
#import "PlayerDao.h"
#import "Player.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}




- (IBAction)add:(id)sender {
    PlayerDao *playDao = [PlayerDao sharedIntance];
    NSLog(@"%@",playDao);
    Player *player = [[Player alloc] init];
    player.playerName = @"詹姆斯";
    player.team = @"东部";
    [playDao addPlayer:player];
}

- (IBAction)del:(id)sender {
    PlayerDao *playDao = [PlayerDao sharedIntance];
    Player *playe = [[Player alloc] init];
    playe.playerId = 10;
    [playDao delPlayer:playe];
    
}

- (IBAction)find:(id)sender {
    PlayerDao *playDao = [PlayerDao sharedIntance];
    [playDao findPlayer];
    
}

- (IBAction)uodate:(id)sender {
    PlayerDao *playDao = [PlayerDao sharedIntance];
    Player *playe = [[Player alloc] init];
    playe.playerName = @"詹姆斯";
    playe.team = @"西部";
    [playDao updatePlayer:playe];
    NSLog(@"%@",playDao);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end


一个表对应一个dao这种形式出来。   FMDB 还是更多的是以jdbc的形式来处理表。 需要打开,关闭这样的处理。   看是否能进行通过实体和表进行来反射出,这种默认的设置太麻烦,后期看改动。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值