iOS 使用FMDB进行数据库操作详解手机开发

  1. 首先要先导入第三方类库FMdatabase。  
  2. 获得存放数据库文件的沙盒地址。 
        +(NSString*)databaseFilePath   
     
    [objc] view plaincopy 
     
            {   
               
            NSArray*filePath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);   
            NSString*documentPath=[filePathobjectAtIndex:0];   
            NSLog(@"%@",filePath);   
            NSString*dbFilePath=[documentPathstringByAppendingPathComponent:@"db.sqlite"];   
            returndbFilePath;   
               
            }   
        3、创建数据库的操作   
           
        +(void)creatDatabase   
            {   
            db=[[FMDatabasedatabaseWithPath:[selfdatabaseFilePath]]retain];   
            }   
        4、创建表   
           
        +(void)creatTable   
            {   
            //先判断数据库是否存在,如果不存在,创建数据库   
            if(!db){   
            [selfcreatDatabase];   
            }   
            //判断数据库是否已经打开,如果没有打开,提示失败   
            if(![dbopen]){   
            NSLog(@"数据库打开失败");   
            return;   
            }   
               
            //为数据库设置缓存,提高查询效率   
            [dbsetShouldCacheStatements:YES];   
               
            //判断数据库中是否已经存在这个表,如果不存在则创建该表   
            if(![dbtableExists:@"people"])   
            {   
            [dbexecuteUpdate:@"CREATETABLES people(people_id INTEGER PRIMARY KEY AUTOINCREAMENT, nameTEXT, age INTEGER) "];   
               
               
            NSLog(@"创建完成");   
            }   
               
            }   
        5、增加表数据   
           
        +(void)insertPeople:(People*)aPeople   
            {   
            if(!db){   
            [selfcreatDatabase];   
            }   
               
            if(![dbopen]){   
            NSLog(@"数据库打开失败");   
            return;   
            }   
               
            [dbsetShouldCacheStatements:YES];   
               
            if(![dbtableExists:@"people"])   
            {   
            [selfcreatTable];   
            }   
            //以上操作与创建表是做的判断逻辑相同   
            //现在表中查询有没有相同的元素,如果有,做修改操作   
            FMResultSet*rs=[dbexecuteQuery:@"select* from people where people_id = ?",[NSStringstringWithFormat:@"%d",aPeople.peopleID]];   
            if([rsnext])   
            {   
            NSLog(@"dddddslsdkien");   
            [dbexecuteUpdate:@"updatepeople set name = ?, age = ? where people_id =1",aPeople.name,[NSStringstringWithFormat:@"%d",aPeople.age]];   
            }   
            //向数据库中插入一条数据   
            else{   
            [dbexecuteUpdate:@"INSERTINTO people (name, age) VALUES(?,?)",aPeople.name,[NSStringstringWithFormat:@"%d",aPeople.age]];   
            }   
               
            }   
        6、删除数据   
           
        +(void)deletePeopleByID:(int)ID   
            {   
            if(!db){   
            [selfcreatDatabase];   
            }   
               
            if(![dbopen]){   
            NSLog(@"数据库打开失败");   
            return;   
            }   
               
            [dbsetShouldCacheStatements:YES];   
               
            //判断表中是否有指定的数据, 如果没有则无删除的必要,直接return   
            if(![dbtableExists:@"people"])   
            {   
            return;   
            }   
            //删除操作   
            [dbexecuteUpdate:@"deletefrom people where people_id = ?", [NSStringstringWithFormat:@"%d",ID]];   
               
            [dbclose];   
            }   
        7、修改操作与增加操作的步骤一致   
           
        +(NSArray*)getAllPeople   
            {   
               
            if(!db){   
            [selfcreatDatabase];   
            }   
               
            if(![dbopen]){   
            NSLog(@"数据库打开失败");   
            returnnil;   
            }   
               
            [dbsetShouldCacheStatements:YES];   
               
            if(![dbtableExists:@"people"])   
            {   
            returnnil;   
            }   
               
            //定义一个可变数组,用来存放查询的结果,返回给调用者   
            NSMutableArray*peopleArray=[[NSMutableArrayalloc]initWithArray:0];   
            //定义一个结果集,存放查询的数据   
            FMResultSet*rs=[dbexecuteQuery:@"select* from people"];   
            //判断结果集中是否有数据,如果有则取出数据   
            while([rsnext]){   
            People*aPeople=[[Peoplealloc]init];   
               
            aPeople.peopleID=[rsintForColumn:@"people_id"];   
            aPeople.name=[rsstringForColumn:@"name"];   
            aPeople.age=[rsintForColumn:@"age"];   
            //将查询到的数据放入数组中。   
            [peopleArrayaddObject:aPeople];   
            }   
            return[peopleArrayautorelease];   
            }   
        8、查询   
           
        +(NSArray*)getAllPeople   
            {   
               
            if(!db){   
            [selfcreatDatabase];   
            }   
               
            if(![dbopen]){   
            NSLog(@"数据库打开失败");   
            returnnil;   
            }   
               
            [dbsetShouldCacheStatements:YES];   
               
            if(![dbtableExists:@"people"])   
            {   
            returnnil;   
            }   
               
            //定义一个可变数组,用来存放查询的结果,返回给调用者   
            NSMutableArray*peopleArray=[[NSMutableArrayalloc]initWithArray:0];   
            //定义一个结果集,存放查询的数据   
            FMResultSet*rs=[dbexecuteQuery:@"select* from people"];   
            //判断结果集中是否有数据,如果有则取出数据   
            while([rsnext]){   
            People*aPeople=[[Peoplealloc]init];   
               
            aPeople.peopleID=[rsintForColumn:@"people_id"];   
            aPeople.name=[rsstringForColumn:@"name"];   
            aPeople.age=[rsintForColumn:@"age"];   
            //将查询到的数据放入数组中。   
            [peopleArrayaddObject:aPeople];   
            }   
            return[peopleArrayautorelease];   
            }  

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5171.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论