码迷,mamicode.com
首页 > 数据库 > 详细

FMDB的简单使用

时间:2016-07-12 15:13:40      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

#import "RootViewController.h"
#import "FMDatabase.h"
@interface RootViewController ()
{
    FMDatabase * myDB;
}
@end

@implementation RootViewController
//FMDB是将SQLite中复杂的SQL语法进行封装
//FMDB适用于ARC或者MRC环境的编码
//具有完美的添加、查找、删除、修改数据库的方法

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (IBAction)createDB:(id)sender
{
    //数据库在使用之前 一定要确保在沙盒路径下确实存在该库
    //<1>获取当前工程沙盒路径
    //数据库的后缀是.db或者.sqlite
    NSString * path = [NSHomeDirectory() stringByAppendingString:@"/Documents/person.db"];
    //使用数据库 必须确保这个数据库是打开状态
    //<2>打开数据库
    myDB = [[FMDatabase alloc]initWithPath:path];
    BOOL isOpen = [myDB open];
    if(isOpen)
    {
        NSLog(@"数据库打开成功");
    }
    else
    {
        NSLog(@"数据库打开失败%@",[myDB lastErrorMessage]);
    }
    //如果在该路径下存在person.db这个库 就直接打开该库 如果不存在这个库 就先创建库再打开
    //不会在同一个路径下创建同名的库
    
    //创建表格
    NSString * sql  = @"create table if not exists Users(ID integer primary key autoincrement,name varchar(256),age integer,headImage blob)";
    //blob表示的是二进制
    BOOL isSuccess = [myDB executeUpdate:sql];
    //executeUpdate:除了查询语句 剩余的其他语句都是用该方法调用
    if(isSuccess)
    {
        NSLog(@"表格创建成功");
    }
    else
    {
        NSLog(@"表格创建失败%@",myDB.lastErrorMessage);
    }
    //表格与数据库是一样的 在同一个路径下创建同名表格失败
    
    NSLog(@"%@",path);
}
- (IBAction)insertDB:(id)sender
{
    NSString * sql = @"insert into Users(name,age,headImage) values (?,?,?)";
    //? 占位符 可以是任意类型的对象指针 不能是基本类型的数据 如果想要存放基本类型的数据 需要将基本类型的数据封装成OC的对象
    NSString * nameStr = @"张三";
    NSNumber * ageNum = [NSNumber numberWithInt:20];
    UIImage * image = [UIImage imageNamed:@"0.png"];
    
    //图片需要转化成NSData类型
    NSData * data = UIImagePNGRepresentation(image);
    //拼接sql语句
    BOOL ret = [myDB executeUpdate:sql,nameStr,ageNum,data];
    if(ret)
    {
        NSLog(@"数据添加成功");
    }
    else
    {
        NSLog(@"数据添加失败%@",myDB.lastErrorMessage);
    }
}

- (IBAction)updateDB:(id)sender
{
    NSString * sql = @"update Users set age = ? where name = ?";
    NSString * name = @"张三";
    NSNumber * ageNum = [NSNumber numberWithInt:50];
    BOOL ret = [myDB executeUpdate:sql,ageNum,name];
    if(ret)
    {
        NSLog(@"修改成功");
    }
    else
    {
        NSLog(@"修改失败%@",myDB.lastErrorMessage);
    }
}

- (IBAction)selectDB:(id)sender
{
    NSString * sql = @"select * from Users where name = ?";
    NSString * name = @"张三";
    FMResultSet * result = [myDB executeQuery:sql,name];
    while ([result next])
    {
        NSString * name = [result stringForColumn:@"name"];
        //stringForColumn:会将该列的数据读出  以字符串的形式获取
        
        int age = [result intForColumnIndex:2];
        //按钮列的下标读取数据 读出的数据直接转化成int类型
        
        NSData * imageData = [result dataForColumn:@"headImage"];
        
        UIImage * headImage = [UIImage imageWithData:imageData];
        
        self.nameLabel.text = name;
        self.ageLabel.text = [NSString stringWithFormat:@"%d",age];
        self.headImage.image = headImage;

    }
}

- (IBAction)deleteDB:(id)sender
{
    NSString * sql = @"delete from Users where name = ?";
    NSString * name = @"张三";
    
    BOOL ret = [myDB executeUpdate:sql,name];
    if(ret)
    {
        NSLog(@"删除成功");
    }
    else
    {
        NSLog(@"删除失败");
    }
    
}

- (IBAction)closeDB:(id)sender
{
    //数据库关闭了以后 就不能对数据库进行其他操作
    if(myDB)
    {
        [myDB close];
        myDB = nil;
    }
}

 

FMDB的简单使用

标签:

原文地址:http://www.cnblogs.com/sayimba/p/5663531.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!