關於FMDB最基本的使用咱們就不在說了,這個網上大把的文章介紹,我就在這裏總結幾點我最近在寫一個小東西的時候注意到的一點點東西:sql
一: 怎麼看真機上SQLite數據庫數據庫
咱們在開發的過程當中確定有使用到真機測試,不知道會不會有小夥伴有好奇心想看看在真機環境中咱們建立的數據庫可視化的數據是什麼樣子呢。固然你能夠經過SQ語句去查看,固然咱們也有辦法直接像看錶格數據同樣查看它。瀏覽器
一、XCode - Window - Devices and Simlators安全
二、選中你的手機 - 選中你的App - 下面設置按鈕 (以下圖所示)併發
三、Download Container...app
四、最好保存桌面,方便咱們查看學習
而後你桌面就會有一份 .xcappdata 文件了,這時候你再「顯示包內容」 就能夠看到裏面有一份 AppData 和 AppDataInfo.plist 文件,這時候你 AppData - Documents測試
就能看到你的 X.sqlite 數據庫了。線程
查看這份數據庫我使用的是一個叫SQLite的國外軟件的破解版,直接可視化看到,大概界面以下面這樣:debug
固然還有網上不少人說的 火狐瀏覽器的 SQLite Manager 這個擴展,但因爲個人火狐瀏覽器比較新,就沒辦法像之前那樣可視化的查看了,你如今安裝擴展以後是下面這樣子的。關於它如今的簡單的使用我有標註出來,如今用它查看沒無法直接可視化的,但你能夠經過下面SQ語句操做該數據庫。
關於FMDB最基本的使用咱們就不在說了,這個網上大把的文章介紹,我就在這裏總結幾點我最近在寫一個小東西的時候注意到的一點點東西:
二:要是你要寫入大量的數據
一、引入的它叫作「事務」,事務主要是解決數據量多的耗時操做。
在 SQL 語言中,定義事務的語句有三條:
BEGIN TRANSACTION
COMMIT TRANSACTION
ROLLBACK TRANSACTION
二、事務咱們這樣介紹概念,那它的優勢又有那些呢?
/** debug @param title 統計標題 @param content 統計內容JSON數據 */ -(void)DebugSensorsAnalyticsShowWithDoraemonKit:(NSString *)title andParments:(NSString * )content{ // 得到Documents目錄路徑 NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *dbPath = [documentsPath stringByAppendingPathComponent:@"SensorsAnalytics.sqlite"]; debugLog(@"!!! debug !!! dbPath = %@",dbPath); //建立數據庫 _dataBase = [FMDatabase databaseWithPath:dbPath]; if (![_dataBase open]) { debugLog(@"SensorsAnalytics open fail"); return; } //建立表 currenthour 比較時間 一小時前的刪除 否則數據過大 NSString * sql = @"create table if not exists sensorsAnalytics ('time' TEXT NOT NULL,'title' TEXT NOT NULL, 'content' TEXT NOT NULL,'hour' TEXT NOT NULL)"; BOOL result = [_dataBase executeUpdate:sql]; if (result) { debugLog(@"create sensorsAnalytics table success"); } [_dataBase beginTransaction];//開啓一個事務 BOOL isRollBack = NO; @try { NSString *currentTime = [self getCurrentTimes]; NSString *currenthour = [self getCurrentHour]; BOOL insertResult = [_dataBase executeUpdate:@"insert into 'sensorsAnalytics'(time,title,content,hour) values(?,?,?,?)" withArgumentsInArray:@[currentTime,title,content,currenthour]]; if (insertResult) { debugLog(@"insert into 'sensorsAnalytics' success"); } // 把一個小時前的數據刪除 BOOL deleteResult = [_dataBase executeUpdate:[NSString stringWithFormat:@"delete from sensorsAnalytics where hour < %@",currenthour]]; if (deleteResult) { debugLog(@"delete from 'sensorsAnalytics' success"); } } @catch (NSException *exception) { isRollBack = YES; [_dataBase rollback]; // 回滾 } @finally { if (!isRollBack) { [_dataBase commit]; // 沒有錯誤一次性提交 } } [_dataBase close]; } -(NSString*)getCurrentTimes{ NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"MM-dd HH:mm:ss"]; NSDate *datenow = [NSDate date]; NSString *currentTimeString = [formatter stringFromDate:datenow]; return currentTimeString; } -(NSString *)getCurrentHour{ NSDate *now = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSUInteger unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:now]; NSString * hour = [NSString stringWithFormat:@"%ld",(long)[dateComponent hour]]; return hour; }
參考學習連接: FMDB寫入大量數據的處理方法