FMDB我们经常使用,是对 sqlite 的一个很好的封装.但是使用还是有点不太方便,索性就写了一个 manager 类管理,进行 crud 操作.我们知道这四个操作中当遇到大量数据时候,插入和更新操作是最耗时的,所以我们就要使用事务进行操作,到达节省时间的目的,根据经验再插入10W 条数据大概是2.6s, 是不是很6.那么我们就来看看吧.
    .h

    1. //
    2. // FMDBManager.h
    3. // FMDBManager
    4. //
    5. // Created by HMC on 2016/10/31.
    6. // Copyright © 2016年 HMC. All rights reserved.
    7. //
    8. #import <Foundation/Foundation.h>
    9. @interface FMDBManager : NSObject
    10. //需要使用事务
    11. -(BOOL)insert;
    12. -(BOOL)update;
    13. //arr 查询条件
    14. -(NSArray *)select:(NSArray *)arr;
    15. //arr 删除的条件
    16. -(void)delete:(NSArray *)arr;
    17. @end

    .m 采用单例模式设置

    1. //
    2. // FMDBManager.m
    3. // FMDBManager
    4. //
    5. // Created by HMC on 2016/10/31.
    6. // Copyright © 2016年 HMC. All rights reserved.
    7. //
    8. #import "FMDBManager.h"
    9. #import "FMDB.h"
    10. @interface FMDBManager()
    11. @property (strong, nonatomic) FMDatabaseQueue * fmdbQueue;
    12. @end
    13. @implementation FMDBManager
    14. -(instancetype)init{
    15. if ( self = [super init]) {
    16. //单例模式设计
    17. static dispatch_once_t onceToken;
    18. dispatch_once(&onceToken, ^{
    19. NSLog(@"%@",[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"user.db"]);
    20. _fmdbQueue = [FMDatabaseQueue databaseQueueWithPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"user.db"]];
    21. [_fmdbQueue inDatabase:^(FMDatabase *db) {
    22. if ([db executeUpdate:@"create table if not exists user (userid integer primary key autoincrement , username text)"]) {
    23. NSLog(@"create table success");
    24. }else{
    25. NSLog(@"create table error");
    26. }
    27. }];
    28. });
    29. }
    30. return self;
    31. }
    32. -(BOOL)insert{
    33. __block BOOL isSuccess = NO;
    34. NSString * sql = @"insert into user (username) values ('SJW')";
    35. [_fmdbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {
    36. @try {
    37. CFTimeInterval start= CFAbsoluteTimeGetCurrent();
    38. //for (int i= 0 ; i< 100000; i++) {
    39. [db executeUpdate:sql];
    40. //}
    41. NSLog(@"时间:%f",CFAbsoluteTimeGetCurrent()-start);
    42. } @catch (NSException *exception) {
    43. *rollback = YES;
    44. } @finally {
    45. *rollback = NO;
    46. isSuccess = YES;
    47. }
    48. }];
    49. return isSuccess;
    50. }
    51. -(BOOL)update{
    52. __block BOOL isSuccess = NO;
    53. NSString * sql = @"update user set username = 'SJW'";
    54. [_fmdbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {
    55. @try {
    56. [db executeUpdate:sql];
    57. } @catch (NSException *exception) {
    58. //失败了 就回滚数据
    59. *rollback = YES;
    60. } @finally {
    61. *rollback = NO;
    62. isSuccess = YES;
    63. }
    64. }];
    65. return isSuccess;
    66. }
    67. -(NSArray *)select:(NSArray *)arr{
    68. NSMutableArray * arrs = [NSMutableArray array];
    69. NSString * sql = @"select * from user where 1 = 1";
    70. if (arr) {
    71. for (NSString * str in arr) {
    72. [sql stringByAppendingString:[NSString stringWithFormat:@"and %@",str]];
    73. }
    74. }
    75. [_fmdbQueue inDatabase:^(FMDatabase *db) {
    76. FMResultSet *result = [db executeQuery:sql];
    77. while ([result next]) {
    78. NSString * username= [result stringForColumn:@"username"];
    79. NSLog(@"%@",username);
    80. [arrs addObject:username];
    81. }
    82. }];
    83. return arrs;
    84. }
    85. -(void)delete: (NSArray *) arr{
    86. NSString * sql = @"DELETE from user where 1 = 1 ";
    87. if (arr) {
    88. for (NSString * str in arr) {
    89. [sql stringByAppendingString:[NSString stringWithFormat:@"and %@",str]];
    90. }
    91. }
    92. [_fmdbQueue inDatabase:^(FMDatabase *db) {
    93. FMResultSet *result = [db executeQuery:sql];
    94. while ([result next]) {
    95. NSString * username= [result stringForColumn:@"username"];
    96. NSLog(@"%@",username);
    97. }
    98. }];
    99. }
    100. @end

    调用

    1. //
    2. // ViewController.m
    3. // FMDBManager
    4. //
    5. // Created by HMC on 2016/10/31.
    6. // Copyright © 2016年 HMC. All rights reserved.
    7. //
    8. #import "ViewController.h"
    9. @interface ViewController ()
    10. @end
    11. @implementation ViewController
    12. - (void)viewDidLoad {
    13. [super viewDidLoad];
    14. FMDBManager * ma = [[FMDBManager alloc]init];
    15. [ma insert];
    16. [ma select:@[@"username = 'SJW'"]];
    17. // [ma update];
    18. [ma delete:@[@"username = 'songjinwei'"]];
    19. }
    20. @end