FMDB

#import <Foundation/Foundation.h>

/*

 数据管理

 按照单例设计模式 进行 设计

 存储 收藏/下载/浏览记录

 

 //增删改查数据

 */


#import "FMDatabase.h"


@interface DBManager : NSObject

//非标准单例

+ (DBManager *)sharedManager;


//增加 数据 收藏/浏览/下载记录


//存储类型 favorites downloads browses


- (void)insertModel:(id)model recordType:(NSString *)type;

//删除指定的应用数据 根据指定的类型

- (void)deleteModelForAppId:(NSString *)appId recordType:(NSString *)type;


//根据指定类型  查找所有的记录

- (NSArray *)readModelsWithRecordType:(NSString *)type;


//根据指定的类型 返回 这条记录在数据库中是否存在

- (BOOL)isExistAppForAppId:(NSString *)appId recordType:(NSString *)type;


//根据 指定的记录类型  返回 记录的条数

- (NSInteger)getCountsFromAppWithRecordType:(NSString *)type;



SAASASJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK







#import "DBManager.h"

#import "AppModel.h"


NSString * const kLZXFavorite = @"favorites";

NSString * const kLZXDownloads = @"downloads";

NSString * const kLZXBrowses = @"browese";


/*

 数据库

 1.导入 libsqlite3.dylib

 2.导入 fmdb

 3.导入头文件

 fmdb 是对底层C语言的sqlite3的封装

 

 */

@implementation DBManager

{

    //数据库对象

    FMDatabase *_database;

}

//非标准单例

+ (DBManager *)sharedManager {

    static DBManager *manager = nil;

    @synchronized(self) {//同步 执行 防止多线程操作

        if (manager == nil) {

            manager = [[self alloc] init];

        }

    }

    return manager;

}


- (id)init {

    if (self = [super init]) {

        //1.获取数据库文件app.db的路径

        NSString *filePath = [self getFileFullPathWithFileName:@"app.db"];

        //2.创建database

        _database = [[FMDatabase alloc] initWithPath:filePath];

        //3.open

        //第一次 数据库文件如果不存在那么 会创建并且打开

        //如果存在 那么直接打开

        if ([_database open]) {

            NSLog(@"数据库打开成功");

            //创建表 不存在 则创建

            [self creatTable];

        }else {

            NSLog(@"database open failed:%@",_database.lastErrorMessage);

        }

    }

    return self;

}

#pragma mark - 创建表

- (void)creatTable {

    //字段: 应用名 应用id 当前价格 最后价格 icon地址 记录类型 价格类型

    NSString *sql = @"create table if not exists appInfo(serial integer  Primary Key Autoincrement,appName Varchar(1024),appId Varchar(1024),currentPrice Varchar(1024),lastPrice Varchar(1024),iconUrl Varchar(1024),recordType Varchar(1024),priceType Varchar(1024))";

    //创建表 如果不存在则创建新的表

    BOOL isSuccees = [_database executeUpdate:sql];

    if (!isSuccees) {

        NSLog(@"creatTable error:%@",_database.lastErrorMessage);

    }

}

#pragma mark - 获取文件的全路径


//获取文件在沙盒中的 Documents中的路径

- (NSString *)getFileFullPathWithFileName:(NSString *)fileName {

    NSString *docPath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents"];

    NSFileManager *fm = [NSFileManager defaultManager];

    if ([fm fileExistsAtPath:docPath]) {

        //文件的全路径

        return [docPath stringByAppendingFormat:@"/%@",fileName];

    }else {

        //如果不存在可以创建一个新的

        NSLog(@"Documents不存在");

        return nil;

    }

}



//增加 数据 收藏/浏览/下载记录

//存储类型 favorites downloads browses


- (void)insertModel:(id)model recordType:(NSString *)type {

    AppModel *appModel = (AppModel *)model;

    

    if ([self isExistAppForAppId:appModel.applicationId recordType:type]) {

        NSLog(@"this app has  recorded");

        return;

    }

    NSString *sql = @"insert into appInfo(appName,appId,currentPrice,lastPrice,iconUrl,recordType,priceType) values (?,?,?,?,?,?,?)";

    BOOL isSuccess = [_database executeUpdate:sql,appModel.name,appModel.applicationId,appModel.currentPrice,appModel.lastPrice,appModel.iconUrl,type,appModel.priceTrend];

    if (!isSuccess) {

        NSLog(@"insert error:%@",_database.lastErrorMessage);

    }

}


//删除指定的应用数据 根据指定的类型

- (void)deleteModelForAppId:(NSString *)appId recordType:(NSString *)type {

    NSString *sql = @"delete from appInfo where appId = ? and recordType = ?";

    BOOL isSuccess = [_database executeUpdate:sql,appId,type];

    if (!isSuccess) {

        NSLog(@"delete error:%@",_database.lastErrorMessage);

    }

}


//根据指定类型  查找所有的记录

//根据记录类型 查找 指定的记录 -》收藏记录  浏览记录 下载记录


- (NSArray *)readModelsWithRecordType:(NSString *)type{

    

    NSString *sql = @"select * from appInfo where  recordType = ?";

    FMResultSet * rs = [_database executeQuery:sql,type];


    NSMutableArray *arr = [NSMutableArray array];

    //遍历集合

    while ([rs next]) {

        //把查询之后结果 放在model

        AppModel *appModel = [[AppModel alloc] init];

        appModel.name = [rs stringForColumn:@"appName"];

        appModel.applicationId = [rs stringForColumn:@"appId"];

        appModel.currentPrice = [rs stringForColumn:@"currentPrice"];

        appModel.lastPrice = [rs stringForColumn:@"lastPrice"];

        appModel.iconUrl = [rs stringForColumn:@"iconUrl"];

        appModel.priceTrend = [rs stringForColumn:@"priceType"];

        //放入数组

        [arr addObject:appModel];

        // [appModel release];

    }

    return arr;

}

//根据指定的类型 返回 这条记录在数据库中是否存在

- (BOOL)isExistAppForAppId:(NSString *)appId recordType:(NSString *)type {

    NSString *sql = @"select * from appInfo where appId = ? and recordType = ?";

    FMResultSet *rs = [_database executeQuery:sql,appId,type];

    if ([rs next]) {//查看是否存在 下条记录 如果存在 肯定 数据库中有记录

        return YES;

    }else{

        return NO;

    }

}

//根据 指定的记录类型  返回 记录的条数

- (NSInteger)getCountsFromAppWithRecordType:(NSString *)type {

    NSString *sql = @"select count(*) from appInfo where recordType = ?";

    FMResultSet *rs = [_database executeQuery:sql,type];

    NSInteger count = 0;

    while ([rs next]) {

        //查找 指定类型的记录条数

        count = [[rs stringForColumnIndex:0] integerValue];

    }

    return count;

}
















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值