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