zoukankan      html  css  js  c++  java
  • FMDB的简单使用

    #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;
        }
    }
  • 相关阅读:
    按列数自动换行
    百度C 语言吧 · 问题资料大全
    最新动态.某美女象山旅游计划
    被点名了,玩个游戏。
    我们仍未知道那天所看见的题的解法 1
    我们仍未知道那天所看见的题的解法 2
    算法初探 平衡树
    排列组合
    HttpRunner2.X开源接口测试框架学习(一):介绍与安装
    jmeter基础一:JMeter的主要测试组件总结
  • 原文地址:https://www.cnblogs.com/sayimba/p/5663531.html
Copyright © 2011-2022 走看看