SYCacheManager緩存數(shù)據(jù)操作

SYCacheManager使用FMDB必盖、LKDB進行二次封裝隧出,緩存數(shù)據(jù)。

FMDB使用效果圖
FMDB使用效果圖
LKDBHelper使用效果圖
LKDBHelper使用效果圖

FMDB的基本使用
使用FMDatabase操作數(shù)據(jù)剔宪,使用時,必須保證如下三點:
(1)已創(chuàng)建數(shù)據(jù)庫
(2)操作前壹无,必須打開數(shù)據(jù)庫
(3)操作后葱绒,必須關閉數(shù)據(jù)庫
數(shù)據(jù)庫存儲路徑

- (NSString *)dataPath
{
    if (_dataPath == nil)
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        // NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
        NSString *documentDirectory = [paths objectAtIndex:0];
        _dataPath = [documentDirectory stringByAppendingPathComponent:@"cache.db"];
        
        NSLog(@"_dataPath = %@", _dataPath);
    }
    return _dataPath;
}

FMDatabase實例化,并創(chuàng)建數(shù)據(jù)庫

- (FMDatabase *)dataBase
{
    if (_dataBase == nil)
    {
        _dataBase = [FMDatabase databaseWithPath:self.dataPath];
    }
    return _dataBase;
}
  • 創(chuàng)建表
if ([self.dataBase open])
{
            NSString *createTabel = @"CREATE TABLE if not exists CompanyTable (departmentId text PRIMARY KEY,departmentName text,departmentStatus text)";
            BOOL isResult = [self. dataBase executeUpdate:createTabel];
            NSLog(@"createTabel = %@", (isResult ? @"success" : @"error"));
            [self.dataBase close];
}
  • 刪除表
if ([self.dataBase open])
{
            NSString *deleteTabel = @"DROP TABLE CompanyTable";
            BOOL isResult = [self. dataBase executeUpdate:deleteTabel];
            NSLog(@"deleteTabel = %@", (isResult ? @"success" : @"error"));
            [self.dataBase close];
}
  • 保存數(shù)據(jù)
if ([self.dataBase open])
{
            NSString *saveData = @"INSERT INTO CompanyTable (departmentId, departmentName, departmentStatus) VALUES (?,?,?)";
            BOOL isResult = [self. dataBase executeUpdate:saveData, @"168", @"互聯(lián)網(wǎng)部門", @"禁用"];
            NSLog(@"saveData = %@", (isResult ? @"success" : @"error"));
            [self.dataBase close];
}
  • 刪除數(shù)據(jù)
if ([self.dataBase open])
{
            NSString *deleteData = @"DELETE FROM CompanyTable";
            BOOL isResult = [self. dataBase executeUpdate:deleteData];
            NSLog(@"deleteData = %@", (isResult ? @"success" : @"error"));
            [self.dataBase close];
}
  • 修改數(shù)據(jù)
if ([self.dataBase open])
{
            NSString *modifyData = @"UPDATE CompanyTable set departmentStatus = ? where departmentName = ?";
            BOOL isResult = [self. dataBase executeUpdate:modifyData, @"啟用", @"互聯(lián)網(wǎng)部門"];
            NSLog(@"modifyData = %@", (isResult ? @"success" : @"error"));
            [self.dataBase close];
}
  • 讀取數(shù)據(jù)
if ([self.dataBase open])
{
            NSString *readData = @"SELECT * FROM CompanyTable WHERE departmentName = ?";
            FMResultSet *result = [self. dataBase executeQuery:readData, @"互聯(lián)網(wǎng)部門"];
            // 讀取全部數(shù)據(jù)
            while ([result next])
            {
                NSString *idStr = [result stringForColumn:@"departmentId"];
                NSString *nameStr = [result stringForColumn:@"departmentName"];
                NSString *statusStr = [result stringForColumn:@"departmentStatus"];
                
                NSLog(@"查找數(shù)據(jù)成功斗锭。\nid = %@, name = %@, status = %@", idStr, nameStr, statusStr);
            }
            [self.dataBase close];
}
// 讀取單條數(shù)據(jù)
if ([result next])
{
             NSString *idStr = [result stringForColumn:@"departmentId"];
             NSString *nameStr = [result stringForColumn:@"departmentName"];
             NSString *statusStr = [result stringForColumn:@"departmentStatus"];
                
             NSLog(@"查找數(shù)據(jù)成功地淀。\nid = %@, name = %@, status = %@", idStr, nameStr, statusStr);
}

執(zhí)行語句使用的四種等價情況,使用更新語句示例

  • 直接使用完整的SQL
NSString *sqlUpate = @"UPDATE CompanyTable(departmentStatus) values('啟用')";
[self.dataBase executeUpdate:sqlUpate];
  • 使用不完整的SQL岖是,里面含有待定字符串"?"帮毁,需要后面的參數(shù)進行替代
NSString *sqlUpate = @"UPDATE CompanyTable set departmentStatus = ? where departmentName = ?";
[self.dataBase executeUpdate:sqlUpate, @"啟用", @"互聯(lián)網(wǎng)部門"];
  • 使用不完整的SQL实苞,里面含有待定字符串"?",需要數(shù)組參數(shù)里面的參數(shù)進行替代
NSString *sqlUpate = @"UPDATE CompanyTableUPDATE CompanyTable(departmentStatus) values(?)";
[self.dataBase executeUpdate:sqlUpate withArgumentsInArray:@[@"啟用"]];
  • SQL語句字符串可以使用字符串格式化烈疚,這種我們應該比較熟悉
NSString *sqlUpate = @"UPDATE CompanyTable(departmentName) values(%@)";
[self.dataBase executeUpdateWithFormat:sqlUpate, @"啟用"];

LKDB的基本使用
通常使用時黔牵,采用單例設計模式進行使用。
數(shù)據(jù)庫存儲路徑:只需要設置數(shù)據(jù)庫名稱即可爷肝,實例化時已實現(xiàn)創(chuàng)建路徑方法猾浦。
實例化

- (instancetype)init
{
    self = [super init];
    if (self)
    {
        self.dataHelper = [[LKDBHelper alloc] initWithDBName:@"LKDB.db"];
    }    
    return self;
}

單例

/// 單例
+ (SYCacheManager *)shareCache
{
    static SYCacheManager *sharedManager;
    static dispatch_once_t onceToken;    
    dispatch_once(&onceToken, ^{
        sharedManager = [[self alloc] init];
        assert(sharedManager != nil);
    });    
    return sharedManager;
}
  • 創(chuàng)建表
- (BOOL)newTableWithModel:(Class)class
{
    BOOL isResult = NO;
    if ([self.dataHelper isExistsWithTableName:NSStringFromClass(class) where:nil])
    {
        isResult = YES;
        NSLog(@"newTableWithModel = 已存在");
    }
    else
    {
        isResult = [self.dataHelper createTableWithModelClass:class];
    }
    NSLog(@"newTableWithModel = %@", (isResult ? @"success" : @"error"));
    return isResult;
}
  • 刪除表
    • 刪除所有表
    • 刪除指定表
- (void)deleteAllTableModel
{
    [self.dataHelper dropAllTable];
}

- (BOOL)deleteTableWithModel:(Class)class
{
    BOOL isResult = [self.dataHelper dropTableWithClass:class];
    NSLog(@"deleteTableWithModel = %@", (isResult ? @"success" : @"error"));
    return isResult;
}
  • 保存數(shù)據(jù)
- (BOOL)saveModel:(id)model
{
    BOOL isResult = NO;
    if ([self.dataHelper isExistsModel:model])
    {
        // 已存在時,先刪除灯抛,且刪除成功再保存
        if ([self deleteModel:model])
        {
            isResult = [self.dataHelper insertWhenNotExists:model];
        }
    }
    else
    {
        // 不存在時金赦,直接刪除
        isResult = [self.dataHelper insertWhenNotExists:model];
    }
    NSLog(@"saveModel = %@", (isResult ? @"success" : @"error"));
    return isResult;
}
  • 刪除數(shù)據(jù)
    • 刪除數(shù)據(jù)
    • 刪除指定條件的數(shù)據(jù)
- (BOOL)deleteModel:(id)model
{
    BOOL isResult = [self.dataHelper deleteToDB:model];
    NSLog(@"isResult = %@", (isResult ? @"success" : @"error"));
    return isResult;
}

- (BOOL)deleteModel:(Class)class where:(id)where
{
    BOOL isResult = [self.dataHelper deleteWithClass:class where:where];
    NSLog(@"isResult = %@", (isResult ? @"success" : @"error"));
    return isResult;
}
  • 修改數(shù)據(jù)
    • 修改數(shù)據(jù)
    • 修改指定條件的數(shù)據(jù)
- (BOOL)updateModel:(id)model
{
    BOOL isResult = [self.dataHelper updateToDB:model where:nil];
    NSLog(@"updateModel = %@", (isResult ? @"success" : @"error"));
    return isResult;
}

- (BOOL)updateModel:(Class)class value:(NSString *)value where:(id)where
{
    BOOL isResult = [self.dataHelper updateToDB:class set:value where:where];
    NSLog(@"updateModel = %@", (isResult ? @"success" : @"error"));
    return isResult;
}
  • 查找數(shù)據(jù)
- (NSArray *)readModel:(Class)class where:(id)where
{
    //  根據(jù) and 條件 查詢所有數(shù)據(jù) NSString *conditions = @"age = 23 and name = '張三1'";
    //  根據(jù) 字典條件,查詢所有數(shù)據(jù) NSDictionary *conditions1 = @{@"age" : @23, @"name" : @"張三1"};
    //  根據(jù) or 條件对嚼,查詢所有數(shù)據(jù) NSString *conditions2 = @"age = 23 or ID = 5";
    //  根據(jù) in 條件夹抗,查詢所有數(shù)據(jù) NSString *conditions3 = @"age in (23, 24)";
    //  根據(jù) 字典 in 條件,查詢所有數(shù)據(jù) NSDictionary *conditions4 = @{@"age" : @[@23, @24]};
    //  查詢符合條件的數(shù)據(jù)有多少條 NSString *conditions5 = @"age = 23 and name = '張三1'";
    
    NSArray *array = [self.dataHelper search:class column:nil where:where orderBy:nil offset:0 count:0];
    return array;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末猪半,一起剝皮案震驚了整個濱河市兔朦,隨后出現(xiàn)的幾起案子偷线,更是在濱河造成了極大的恐慌磨确,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件声邦,死亡現(xiàn)場離奇詭異乏奥,居然都是意外死亡,警方通過查閱死者的電腦和手機亥曹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門邓了,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人媳瞪,你說我怎么就攤上這事骗炉。” “怎么了蛇受?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵句葵,是天一觀的道長。 經(jīng)常有香客問我兢仰,道長乍丈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任把将,我火速辦了婚禮轻专,結果婚禮上,老公的妹妹穿的比我還像新娘察蹲。我一直安慰自己请垛,他們只是感情好催训,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宗收,像睡著了一般瞳腌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上镜雨,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天嫂侍,我揣著相機與錄音,去河邊找鬼荚坞。 笑死挑宠,一個胖子當著我的面吹牛,可吹牛的內容都是我干的颓影。 我是一名探鬼主播各淀,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诡挂!你這毒婦竟也來了碎浇?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤璃俗,失蹤者是張志新(化名)和其女友劉穎奴璃,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體城豁,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡苟穆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了唱星。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雳旅。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖间聊,靈堂內的尸體忽然破棺而出攒盈,到底是詐尸還是另有隱情,我是刑警寧澤哎榴,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布型豁,位于F島的核電站,受9級特大地震影響叹话,放射性物質發(fā)生泄漏偷遗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一驼壶、第九天 我趴在偏房一處隱蔽的房頂上張望氏豌。 院中可真熱鬧,春花似錦热凹、人聲如沸泵喘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纪铺。三九已至相速,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鲜锚,已是汗流浹背突诬。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芜繁,地道東北人旺隙。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像骏令,于是被迫代替她去往敵國和親蔬捷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容