• 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 }
     
  • 相关阅读:
    boostrap各种设备大小,以及不同设备的隐藏和显示
    thinkphp5 layout布局的理解和使用,模板继承等等
    thinkphp5的前台是如何实现的,以及后台栏目的作用
    JS工作流进度条显示,以及相关的思路和原理
    Lnmp服务器集群配置研究和实践
    关于require.js写的最通俗易懂的文章
    使用js把html导出word,单位换算,配置样式和分页,页边距,字体及大小,行距,缩进,@page等等
    使用phpword插件,导出word,并解决循环数据的问题
    php使用array_filter函数,并使用闭包,动态的过滤数组
    leetcode——437. 路径总和 III
  • 原文地址:https://www.cnblogs.com/xvewuzhijing/p/4894391.html
Copyright © 2020-2023  润新知