数据库的建立

/*
 iOS使用的数据库 是 轻量级的sqlite
 数据库 里面 实际上就是一张一张的table
 
 //开发中本地持久化存储的 就是数据模型对象中的属性数据
 
 每张表中 每一列就是一个字段 (数据模型对象的属性/类字段)
 表中的每一行我们称为 一条记录 (一个数据模型对象的信息)
 
数据库 要1.创建数据库文件  2.sql语句创建表  3.sql语句增删改查
 
 代码操作数据库 用底层C语言(sqlite3)操作,但是C语言操作起来比较麻烦我们开发中常用 一个Fmdb的第三方开源库进行 操作
 fmdb 实际上就是对底层C语言(sqlite3)的封装
 
 fmdb 步骤
 1.导入库  fmdb 和 libsqlite3.dylib
 2.导入 头文件 #import "FMDatabase.h"
 3.创建 数据库对象 FMDatabase
  3.1 创建数据库文件
   3.2 sql语句创建表
    3.3 sql语句增删改查

 */


- (void)viewDidLoad
{
    [super viewDidLoad];
    [self creatDatabase];
    //增加 10个数据
    //[self insertData];
    [self findData];
    [self findCount];
    
    //删除
    //[self deleteDataWithName:@"xiaohong9"];
    //修改
    [self updateAge:100 withName:@"xiaohong0"];
    
    [self findData];
    [self findCount];
}



- (void)creatDatabase {
    
    //创建FMDatabase对象 根据传入数据库文件进行
    
    //数据库文件 都放在 沙盒中

    
    NSString *docmentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *dataFilePath = [docmentsPath stringByAppendingPathComponent:@"user.sqlite"];
    //user.sqlite /user.db
    _database  = [[FMDatabase alloc] initWithPath:dataFilePath];
    
    //打开数据库
    if ([_database open]) {//打开的时候如果 没有指定的数据库文件 那么会创建新的并且打开,如果有 那么就直接打开
        //根据传入的路径进行打开

        
        //打开成功 进行创建表
        [self creatTable];
    }else {
        //获取最近一次错误
        NSLog(@"open failed:%@",[_database lastErrorMessage]);
    }
}
#pragma mark - 创建表
- (void)creatTable {
    //写一个sql 语句
    //写成 oc的字符串 然后调用相关的函数来执行
    /*
     CREATE TABLE Person (
     serial integer  Primary Key Autoincrement,
     name Varchar(256) DEFAULT NULL,
     age integer,
     score Double DEFAULT NULL)
     */

    
    NSString *sql = @"create table if not exists user(serial integer  Primary Key Autoincrement,name Varchar(256),age integer,time date,image blob)";
    
    //执行sql 语句

    BOOL isSuccess = [_database executeUpdate:sql];
    if (isSuccess) {
        NSLog(@"创建表成功");
    }else{
        NSLog(@"create table failed!%@",[_database lastErrorMessage]);
    }
}
/*
 执行sql语句只有两个函数
 //只执行查询 语句 "select  ...."
- executeQuery:<#(NSString *), ...#>
 
 执行 增删改 操作的语句 创建表的语句
 - executeUpdate:
 */

- (void)insertData {
    //增加10个数据
    //sql语句 中的占位符 用 ?
    //?对应的只能是对象地址
    
    //类似于 %@

    NSString *sql = @"insert into user (name,age,time,image) values (?,?,?,?)";
    for (NSInteger i = 0; i < 10; i++) {
        NSString *nameStr = [NSString stringWithFormat:@"xiaohong%d",i];
        NSInteger age = arc4random()%8+18;
        //把一个png的图片转化为二进制 无损转换
        NSData *data = UIImagePNGRepresentation([UIImage imageNamed: @"Mole01"]);
        //把jpg 转化为二进制 有损 转换 第二个参数 写 0--1
        //NSData *data1 = UIImageJPEGRepresentation([UIImage imageNamed: @"back2.jpg"], 1);
       
        //执行sql语句
        BOOL isS = [_database executeUpdate:sql,nameStr,@(age),[NSDate date],data];
        if (!isS) {
            NSLog(@"insert failed:%@",[_database lastErrorMessage]);
        }
    }
}
#pragma mark - 查找
- (void)findData {
    NSString *sql = @"select * from user";
    
    //执行查询
    //返回一个 结果集合
    //结果在FMResultSet的对象
    //查询 集合 有可能有 多条记录

    FMResultSet *rs = [_database executeQuery:sql];
    //  1 2 3 4 .. 10
    //循环执行过程:第一次循环 遍历 第1条记录 第二次循环遍历第二条记录 依次类推 直到最后没有了记录 循环结束
    

    while ([rs next]) {
        //获取结果指定列的值
        NSString *name = [rs stringForColumnIndex:1];
        //根据字段名获取
        NSString *name1 = [rs stringForColumn:@"name"];
        NSLog(@"name:%@ %@",name,name1);
        NSLog(@"age%d",[rs intForColumn:@"age"]);
        NSLog(@"date:%@",[rs dateForColumn:@"time"]);
        NSData *data = [rs dataForColumn:@"image"];
        UIImage *image = [UIImage imageWithData:data];
        NSLog(@"image:%@",image);
    }
}
#pragma mark - 查找 多少记录
- (void)findCount {
    //查询 总共有 多少条记录
    NSString *sql = @"select count(*) from user";
    FMResultSet *rs = [_database executeQuery:sql];
    while ([rs next]) {
        //有多少条记录  只有一条记录 只有一列 count(*)
        NSLog(@"count:%d",[rs intForColumnIndex:0]);
    }
}
#pragma mark - 删除
- (void)deleteDataWithName:(NSString *)name {
    //根据名字删除
    NSString *sql = @"delete from user where name = ?";
    
    BOOL ret = [_database executeUpdate:sql,name];
    if (!ret) {
        NSLog(@"delete Failed :%@",[_database lastErrorMessage]);
    }
}

#pragma mark - 修改

- (void)updateAge:(NSInteger)newAge withName:(NSString *)name{
    NSString *sql = @"update user set age = ? where name = ?";
    BOOL ret = [_database executeUpdate:sql,@(newAge),name];
    if (!ret) {
        NSLog(@"update failed:%@",[_database lastErrorMessage]);
    }
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值