关于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写入大量数据的处理方法