FMDB

1.什么是FMDB

FMDB是iOS平台的SQLite数据库框架

FMDB以OC的方式封装了SQLite的C语言API

2.FMDB的优点

使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码

对比苹果自带的Core Data框架,更加轻量级和灵活

提供了多线程安全的数据库操作方法,有效地防止数据混乱

我们使用FMDB的时候首先将FMDB使用cocopods导入到我们的工程中:pod 'FMDB'
之后在我们的工程中导入需要的头文件即可:#import "FMDatabase.h"

开发中我们一般会把数据存储到沙河路径下

   NSString * docPath=[[NSString alloc]init];
    docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];//获取沙河地址
    NSLog(@"docPath==%@",docPath);

第一步设置数据库名称

NSString * fileName=[docPath stringByAppendingPathComponent:@"student.sqlite"];//设置数据库名称
        FMDatabase * fmdb=[FMDatabase databaseWithPath:fileName];//创建并获取数据库信息
    if ([fmdb open]) {
        NSLog(@"数据库打开成功!");
    }else{
        NSLog(@"数据库打开失败!");

    }

第二步创建表

其中:
CREATE TABLE IF NOT EXISTS t_student 按照字面翻译为如果不存在t_student,则创建表;
id integer PRIMARY KEY AUTOINCREMENT 字段id数据类型为integer类型,并且为基键自增;
name text NOT NULL, age integer NOT NULL, sex text NOT NULL 字段name、sex的数据类型为text 默认为NULL(空),字段age 数据类型为integer 默认为NULL

//    PRIMARY KEY AUTOINCREMENT 基键 并且自增
    BOOL executeUpdate = [fmdb executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL, sex text NOT NULL);"];
    if (executeUpdate) {
        NSLog(@"创建表成功");
    } else {
        NSLog(@"创建表失败");
    }

第三步添加数据(插入数据)

注意:
1.executeUpdate:不确定的参数用?来占位(后面参数必须是oc对象,;代表语句结束)
2.executeUpdateWithForamat:不确定的参数用%@,%d等来占位 (参数为原始数据类型,执行语句不区分大小写)

int mark_student=1;
    NSString *name = [NSString stringWithFormat:@"马冬梅%@",@(mark_student)];
    int age = mark_student;
    NSString *sex = @"女";
    mark_student ++;
    BOOL results = [fmdb executeUpdate:@"INSERT INTO t_student (name, age, sex) VALUES (?,?,?)",name,@(age),sex];
    //    BOOL result = [fmdb executeUpdateWithFormat:@"insert into t_student (name,age, sex) values (%@,%i,%@)",name,age,sex];
    //3.参数是数组的使用方式
    //    BOOL result = [fmdb executeUpdate:@"INSERT INTO t_student(name,age,sex) VALUES  (?,?,?);" withArgumentsInArray:@[name,@(age),sex]];
    if (results) {
        NSLog(@"插入成功");
    } else {
        NSLog(@"插入失败");
    }

插入成功之后我们会看到相应的数据


创建表并插入数据.png

第四步删除数据(注意同上)

这样就看到之前id为2的马冬梅2就被删除了

int idNum=2;
    BOOL deleate=[fmdb executeUpdate:@"delete from t_student where id = ?",@(idNum)];//按照id进行删除
//    BOOL deleate=[fmdb executeUpdateWithFormat:@"delete from t_student where name = %@",@"王子涵1"];//按照名字进行删除
    if (deleate) {
        NSLog(@"删除成功");
    }else{
        NSLog(@"删除失败");
    }
删除数据.png

第五步修改数据

我们将马冬梅3修改为王小毛

//修改学生的名字
    NSString *newName = @"王小毛";
    NSString *oldName = @"马冬梅3";
    BOOL update=[fmdb executeUpdate:@"update t_student set name = ? where name =?",newName,oldName];
    if (update) {
        NSLog(@"修改成功");
    } else {
        NSLog(@"修改失败");
    }
修改学生名字.png

第六步查询数据

//查询整个表
    FMResultSet * resultSet = [fmdb executeQuery:@"select * from t_student"];
    //根据条件查询
    //FMResultSet * resultSet = [fmdb executeQuery:@"select * from t_student where id < ?", @(4)];
    //遍历结果集合
    while ([resultSet next]) {
        int idNum = [resultSet intForColumn:@"id"];
        NSString *name = [resultSet objectForColumnName:@"name"];
        int age = [resultSet intForColumn:@"age"];
        NSString *sex = [resultSet objectForColumnName:@"sex"];
        NSLog(@"学号:%@ 姓名:%@ 年龄:%@ 性别:%@",@(idNum),name,@(age),sex);
    }
打印表内所有学生信息.png

这样我们就完成了数据库中的增、删、改、查,最后将我们的表删除。

//如果表格存在 则销毁
    BOOL result = [fmdb executeUpdate:@"drop table if exists t_student"];
    if (result) {
        NSLog(@"删除表成功");
    } else {
        NSLog(@"删除表失败");
    }
删除表.png

这样就完整的将数据库完整的操作了一遍~~~

欢迎指正!!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • 1 - 什么是SQlite SQLite是一款轻型的嵌入式数据库 SQLite数据库:可以存储大批量的数据 它占用...
    RadioWaves阅读 338评论 0 0
  • 一、简介 1、什么是SQLite SQLite是一款轻型的嵌入式数据库 它占用资源非常的低,在嵌入式设备中,可能只...
    青葱烈马阅读 628评论 0 0
  • 目前idea激活有很多方法,最简单的是在license server中输入激活服务器,但这类服务器大多数都是非法的...
    褪色的记忆1994阅读 2,365评论 1 3
  • 背景: 蓝可儿,加拿大华裔,卑诗大学学生。2013年1月31日失踪,之后美国警方公布的录像显示蓝可儿在失踪一天前位...
    王子成舟阅读 456评论 0 0