美文网首页
iOS数据存储方式FMDB

iOS数据存储方式FMDB

作者: 何以消摇 | 来源:发表于2016-10-28 16:06 被阅读61次

    从网上下载FMDB的原码,将其拖入到项目中,然后在Link Binary With Libraries中添加libsqlite3.dylib,就可以用了

    实现如下:
    #import"FMDatabase.h"

    #import"FMDatabaseAdditions.h"

    #import"FMDatabaseQueue.h"

    @interfaceViewController ()

    @end

    @implementationViewController

    -(void)viewDidLoad

    {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    }

    -(void)didReceiveMemoryWarning

    {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

    }

    -(void)viewDidUnload{

    [selfsetNameText:nil];

    [selfsetAgeText:nil];

    [selfsetSexText:nil];

    [selfsetShowLabel:nil];

    [superviewDidUnload];

    }

    //保存

    -(IBAction)saveBtn:(id)sender{

    FMDatabase* database=[FMDatabase databaseWithPath:[selfdatabasePath]];

    if(![database open]){

    NSLog(@"Open database failed");

    return;

    }

    if(![database tableExists:@"user"]){

    [database executeUpdate:@"create table user (id integer primary key autoincrement not null,name text,age integer,sex text)"];

    }

    BOOLinsert=[database executeUpdate:@"insert into user (name,age,sex) values (?,?,?)",_nameText.text,[NSNumber numberWithInteger:[_ageText.text integerValue]],_sexText.text];

    //下面注释的也能实现数据的插入,只不过它是传入了字典

    //NSMutableDictionary* argsDict=[NSMutableDictionary dictionary];

    //[argsDict setObject:_nameText.text forKey:@"name"];

    //[argsDict setObject:_ageText.text forKey:@"age"];

    //[argsDict setObject:_sexText.text forKey:@"sex"];

    //BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (:name,:age,:sex)" withParameterDictionary:argsDict];

    if(insert){

    UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示"message:@"保存成功"delegate:nilcancelButtonTitle:nilotherButtonTitles:@"确定",nil];

    [alert show];

    }else{

    NSLog(@"insert failed");

    }

    [database close];

    //下面注释的这一段也是创建表只不过它是多线程安全的,而上面的在多线程中是不安全的

    //FMDatabaseQueue* queue=[FMDatabaseQueue databaseQueueWithPath:[self databasePath]];

    //[queue inDatabase:^(FMDatabase* database){

    //if (![database tableExists:@"user"]){

    //[database executeUpdate:@"create table user (id integer primary key autoincrement not null,name text,age integer,sex text)"];

    //}

    //BOOL insert=[database executeUpdate:@"insert into user (name,age,sex) values (?,?,?)",_nameText.text,[NSNumber numberWithInteger:[_ageText.text integerValue]],_sexText.text];

    //if (insert){

    //UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"保存成功" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定",nil];

    //[alert show];

    //}else{

    //NSLog(@"insert failed");

    //}

    //

    //}];

    //[queue close];

    }

    //显示所有数据库中的数据

    -(IBAction)showBtn:(id)sender{

    FMDatabase* database=[FMDatabase databaseWithPath:[selfdatabasePath]];

    if(![database open]){

    return;

    }

    //注意此处的FMResultSet可以不用关闭,因为数据库关闭的时候FMResultSet自动关闭

    FMResultSet* resultSet=[database executeQuery:@"select* from user"];

    NSString* str=@"";

    while([resultSet next]){

    NSString* name=[resultSet stringForColumn:@"name"];

    NSInteger age=[resultSet intForColumn:@"age"];

    NSString* sex=[resultSet stringForColumn:@"sex"];

    str=[str stringByAppendingFormat:@"Name:%@,Age:%d,Sex:%@\n",name,age,sex];

    NSLog(@"Name:%@,Age:%d,Sex:%@\n",name,age,sex);

    }

    _showLabel.text=str;

    [database close];

    }

    //查询

    -(IBAction)checkBtn:(id)sender{

    FMDatabase* database=[FMDatabase databaseWithPath:[selfdatabasePath]];

    if(![database open]){

    return;

    }

    FMResultSet* resultSet=[database executeQuery:@"select* from user where name = ?",@"chen"];

    NSString* str=@"";

    while([resultSet next]){

    NSString* name=[resultSet stringForColumn:@"name"];

    NSInteger age=[resultSet intForColumn:@"age"];

    NSString* sex=[resultSet stringForColumn:@"sex"];

    str=[str stringByAppendingFormat:@"Name:%@,Age:%d,Sex:%@\n",name,age,sex];

    }

    _showLabel.text=str;

    [database close];

    }

    //删除

    -(IBAction)deleteBtn:(id)sender{

    FMDatabase* database=[FMDatabase databaseWithPath:[selfdatabasePath]];

    if(![database open]){

    return;

    }

    BOOLdelete=[database executeUpdate:@"delete from user where name = ?",@"chen"];

    if(delete){

    UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示"message:@"删除成功"delegate:nilcancelButtonTitle:nilotherButtonTitles:@"确定",nil];

    [alert show];

    }

    [database close];

    }

    //更新

    -(IBAction)updateBtn:(id)sender{

    FMDatabase* database=[FMDatabase databaseWithPath:[selfdatabasePath]];

    if(![database open]){

    return;

    }

    BOOLupdate=[database executeUpdate:@"update user set age = ? where name= ?",[NSNumber numberWithInt:20],@"chen"];

    if(update){

    UIAlertView* alert=[[UIAlertView alloc] initWithTitle:@"提示"message:@"更新成功"delegate:nilcancelButtonTitle:nilotherButtonTitles:@"确定",nil];

    [alert show];

    }

    [database close];

    }

    - (NSString* )databasePath

    {

    NSString* path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES) objectAtIndex:0];

    NSString* dbPath=[path stringByAppendingPathComponent:@"user.db"];

    returndbPath;

    }

    @end

    相关文章

      网友评论

          本文标题:iOS数据存储方式FMDB

          本文链接:https://www.haomeiwen.com/subject/hbpklttx.html