使用FMDB保存首頁數據

FD87DC16F4A42922C5DFDCCF96332A13.jpg

很多的APP都在沒有網絡的時候會保存上一次加載的數據,他們最常用的就是使用SQLite數據庫,其中FMDB也是封裝比較好的框架之一,下面來分享一下FMDB的使用!

  1. 下載并導入框架就沒什么好說的了
  2. 創建一個管理的工具類(SQLiteManager)繼承NSObject
    SQLiteManager.m 里面的內容如下,我寫的是類方法,你也可以寫對象方法,在弄一個單例什么的,寫類方法主要是為了方便!

說一下項目的背景 :我們首頁數據返回來的是一個json,通過框架直接轉成了字典,領導要求只保存第一頁數據就可以,所以我沒有把所有的數據按照字段去解析存儲,我是直接存儲的json數據,也省去了以后的項目開發中增加新的字段,需要對數據庫升級的麻煩只能說我比較懶廢話說了這么多下面是代碼!!!

/// 更新數據
///
/// @param data 數據
/// @param page 頁碼
+ (void)updateHomeData:(NSString *)data page:(NSUInteger)page;

/// 插入數據
///
/// @param data 數據
/// @param page 頁碼
+ (void)insertHomeData:(NSString *)data page:(NSUInteger)page;

/// 查詢數據
+ (NSArray *)queryHomeData;

/// 刪除數據
///
/// @param page 頁碼
+ (void)deleteHomeDataWithPage:(NSInteger)page;

3.在SQLiteManager.h文件中代碼如下:

//定義一個全局對象
static FMDatabase *_db;

//該方法會在調用該類中方法的時候先調用
+ (void)initialize{
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

NSString *dbFilePath = [documentPath stringByAppendingPathComponent:@"homeData.db"];

//1.創建庫
_db = [FMDatabase databaseWithPath:dbFilePath];

//2.打開連接
BOOL result = [_db open];

if (result) {
    //3.創建表
    /**
     如果是創建表,新增數據,修改數據,刪除數據,我們都一個方法
     executeUpdate
     如果是查詢executeQuery
     */
    BOOL result2 = [_db executeUpdate:@"create table if not exists t_home(id integer primary key,data text not null,page integer not null);"];
    if (result2) {
        NSLog(@"創建表成功!!!");
    }
}

}

//添加數據
+ (void)insertHomeData:(NSString *)data page:(NSUInteger)page{
[_db executeUpdateWithFormat:@"insert into t_home(data,page) values(%@,%ld)",data,page];
}

//更新數據
+ (void)updateHomeData:(NSString *)data page:(NSUInteger)page{
[_db executeUpdateWithFormat:@"update t_home set data=%@,page = %ld",data,page];
}

//刪除數據
+ (void)deleteHomeDataWithPage:(NSInteger)page{
[_db executeUpdateWithFormat:@"delete from t_home where page = %ld",page];
}
//查詢數據
+ (NSArray *)queryHomeData{

FMResultSet *resultSet = [_db executeQuery:[NSString stringWithFormat:@"select * from t_home"]];
// 如果你想查詢某個字段可以這么寫(注意%號的個數)
//    FMResultSet *resultSet = [_db executeQuery:[NSString stringWithFormat:@"select * from t_home where name LIKE '%%%@%%'",zhangsan]];
NSMutableArray *homeDatas = [NSMutableArray array];

while (resultSet.next) {
    NSString *homeData = [resultSet stringForColumn:@"data"];
// 將字符串轉換成對象(下面會說為什么存字符串!!!)
    NSData *data = [homeData dataUsingEncoding:NSUTF8StringEncoding];
    NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:NULL];
    //將其添加到數組中
    [homeDatas addObject:array];
}

return homeDatas.copy;
}

4.使用FMDB(重點來了!!!)
在請求數據之前先加載數據庫中的數據

// 取出數據庫中的數據,判斷是否有數據
NSArray *array = [SQLiteManager queryHomeData];
    if (array && array.count > 0) {
// 字典轉模型
    InformationReturnData * returnData = [InformationReturnData mj_objectWithKeyValues:array.firstObject];
    self.listDataArray = returnData.data;
    [self.tableView reloadData];
}
else
{
    // 沒有重數據庫中加載到數據,向服務器請求數據
    [self requestDataWithPage:self.page];
}

5.下面是寫入數據到數據庫(肯定是在數據請求回來之后了~廢話!)

NSError *err = nil;
// 此處是將對象轉成json字符串寫入到數據庫中(數據庫里不能存對象,你不會不知道吧~)
NSData *data = [NSJSONSerialization dataWithJSONObject:jsonData options:NSJSONWritingPrettyPrinted error:&err];
NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSInteger page = returnData.page;
// 刪除之前的舊數據
[SQLiteManager deleteHomeDataWithPage:page];
// 保存新的數據
[SQLiteManager insertHomeData:jsonStr page:page];

總結:這個是我重項目里分離出來的,就沒有demo了,歡迎大家點贊和評論,有不懂的直接留言,我也不一定會哈!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,737評論 25 708
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,173評論 4 61
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,826評論 18 139
  • 1、 前段時間,由于跟男朋友剛分別的愁苦加上裸辭后對未來不確定的恐慌,讓我躲在出租屋里暗無天日,每次夜幕降臨都會難...
    阿毛mao閱讀 436評論 0 0
  • 我是一名超級熱愛東方舞的舞蹈老師,我從小就喜歡各種舞蹈,喜歡做一名舞蹈家,長大了省吃檢用賺的錢都去學舞蹈了,我20...
    青青蝶舞閱讀 804評論 0 0