• FMDB使用


    1、首先要先导入第三方类库FMdatabase。

    2、获得存放数据库文件的沙盒地址。

     
    1 +(NSString *)databaseFilePath 
    2
    3  
    4 NSArray *filePath NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    5 NSString *documentPath [filePath objectAtIndex:0]; 
    6 NSLog(@"%@",filePath); 
    7 NSString *dbFilePath [documentPath stringByAppendingPathComponent:@"db.sqlite"]; 
    8 return dbFilePath; 
    9  
    10 }

    3、创建数据库的操作

     
    1 +(void)creatDatabase 
    2
    3 db [[FMDatabasedatabaseWithPath:[selfdatabaseFilePath]retain]; 
    4 }

    4、创建表

     
    1 +(void)creatTable 
    2
    3 //先判断数据库是否存在,如果不存在,创建数据库 
    4 if (!db) { 
    5 [selfcreatDatabase]; 
    6
    7 //判断数据库是否已经打开,如果没有打开,提示失败 
    8 if (![db open]) { 
    9 NSLog(@"数据库打开失败"); 
    10 return; 
    11
    12  
    13 //为数据库设置缓存,提高查询效率 
    14 [dbsetShouldCacheStatements:YES]; 
    15  
    16 //判断数据库中是否已经存在这个表,如果不存在则创建该表 
    17 if(![dbtableExists:@"people"]) 
    18
    19 [db executeUpdate:@"CREATE TABLES people(people_id INTEGER PRIMARY KEY AUTOINCREAMENT, name TEXT, age INTEGER) "]; 
    20  
    21  
    22 NSLog(@"创建完成"); 
    23
    24  
    25 }

    5、增加表数据

     
    1 +(void)insertPeople:(People *)aPeople 
    2
    3 if (!db) { 
    4 [selfcreatDatabase]; 
    5
    6  
    7 if (![db open]) { 
    8 NSLog(@"数据库打开失败"); 
    9 return; 
    10
    11  
    12 [dbsetShouldCacheStatements:YES]; 
    13  
    14 if(![dbtableExists:@"people"]) 
    15
    16 [selfcreatTable]; 
    17
    18 //以上操作与创建表是做的判断逻辑相同 
    19 //现在表中查询有没有相同的元素,如果有,做修改操作 
    20 FMResultSet *rs [dbexecuteQuery:@"select * from people where people_id = ?",[NSStringstringWithFormat:@"%d",aPeople.peopleID]]; 
    21 if([rs next]) 
    22
    23 NSLog(@"dddddslsdkien"); 
    24 [dbexecuteUpdate:@"update people set name = ?, age = ? where people_id = 1",aPeople.name,[NSStringstringWithFormat:@"%d",aPeople.age]]; 
    25
    26 //向数据库中插入一条数据 
    27 else{ 
    28 [dbexecuteUpdate:@"INSERT INTO people (name, age) VALUES (?,?)",aPeople.name,[NSStringstringWithFormat:@"%d",aPeople.age]]; 
    29
    30  
    31 }

    6、删除数据

     
    1 +(void)deletePeopleByID:(int)ID 
    2
    3 if (!db) { 
    4 [selfcreatDatabase]; 
    5
    6  
    7 if (![db open]) { 
    8 NSLog(@"数据库打开失败"); 
    9 return; 
    10
    11  
    12 [dbsetShouldCacheStatements:YES]; 
    13  
    14 //判断表中是否有指定的数据, 如果没有则无删除的必要,直接return 
    15 if(![dbtableExists:@"people"]) 
    16
    17 return; 
    18
    19 //删除操作 
    20 [db executeUpdate:@"delete from people where people_id = ?", [NSStringstringWithFormat:@"%d",ID]]; 
    21  
    22 [db close]; 
    23 }

    7、修改操作与增加操作的步骤一致

    8、查询

     
    1 +(NSArray *)getAllPeople 
    2
    3  
    4 if (!db) { 
    5 [selfcreatDatabase]; 
    6
    7  
    8 if (![db open]) { 
    9 NSLog(@"数据库打开失败"); 
    10 return nil; 
    11
    12  
    13 [dbsetShouldCacheStatements:YES]; 
    14  
    15 if(![dbtableExists:@"people"]) 
    16
    17 return nil; 
    18
    19  
    20 //定义一个可变数组,用来存放查询的结果,返回给调用者 
    21 NSMutableArray *peopleArray [[NSMutableArrayallocinitWithArray:0]; 
    22 //定义一个结果集,存放查询的数据 
    23 FMResultSet *rs [dbexecuteQuery:@"select * from people"]; 
    24 //判断结果集中是否有数据,如果有则取出数据 
    25 while ([rs next]) { 
    26 People *aPeople [[People allocinit]; 
    27  
    28 aPeople.peopleID [rs intForColumn:@"people_id"]; 
    29 aPeople.name [rs stringForColumn:@"name"]; 
    30 aPeople.age [rs intForColumn:@"age"]; 
    31 //将查询到的数据放入数组中。 
    32 [peopleArray addObject:aPeople]; 
    33
    34 return [peopleArray autorelease]; 
    35 }
     
  • 相关阅读:
    51 Nod 1035 最长的循环节 (此题还不是很懂,日后再看)
    51 Nod 1101 换零钱(动态规划好题)
    51 Nod 1101 换零钱(动态规划好题)
    51 Nod 1163 最高的奖励
    51 Nod1042 数字0到9的数量
    51 Nod 1629 B君的圆锥
    iterrows(), iteritems(), itertuples()对dataframe进行遍历
    pandas计数 value_counts()
    scikit_learn逻辑回归类库
    Python中的深拷贝和浅拷贝
  • 原文地址:https://www.cnblogs.com/xvewuzhijing/p/4894391.html
Copyright © 2020-2023  润新知