FMDB 数据库简单用法

来源:互联网 发布:javascript dom是什么 编辑:程序博客网 时间:2024/05/25 23:57

 

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的形式来处理表。 需要打开,关闭这样的处理。   看是否能进行通过实体和表进行来反射出,这种默认的设置太麻烦,后期看改动。 


0 0