iOS数据库FMDB--增删改查(模糊查询)详细介绍

简介:

很早就想整理一下数据库的使用了,刚好最近接触较多,加之可以安排出空余的时间,所以瓜子我贡献出自己喝咖啡的时间整理一下FMDB的使用,以下是对FMDB的介绍以及基本使用 --- insert、delete、update、select。其中select讲了两种比较重要的方式---ID查询、模糊查询。

在iOS中,主要有5种数据缓存的策略:

1、plist

2、归档

3、偏好设置

4、沙盒文件

5、"SQLite数据库" 

其中,"SQLite数据库" 是最常用的数据缓存方式,在开发中,在无网络的状态下,数据库常常发挥着非常大的作用!

系统提供的数据存储方式的弊端 :

1)不方便操作大量的数据

- 系统提供的数据存储方式都是覆盖存储的,新的数据会覆盖旧的数据.而且当数据量非常大时,如果要添加新的数据,必须先把旧数据全部加载到内存中

2)不方便查找大量的数据

- 当数据量非常庞大时,要查询其中某些数据,就非常困难。

而数据库可以轻松解决以上弊端~

存储方式:(类比于Excel表格)

"Excel"                                           "SQLite"

- 创建Excel文件                   - 创建一个数据库文件

- 创建表                                - 创建表

- 确定表头                            - 创建数据库的字段名(Excel表头),并指定数据类型

- 对Excel表进行数据操作    - 对数据库进行增删改查

FMDB的使用流程:

简单介绍:FMDB 是一个操作数据库的第三方框架,并且支持多线程环境下的操作,也是需要手动导入'libsqlite3.0.tbd'库,以OC的方式封装了SQLite的C语言API。方便灵活并且线程安全。

"FMDatabase" : 单线程;"FMDatabaseQueue" : 多线程;"FMResultSet" : 查询的结果集。

1、创建数据库单例对象(一个数据库可以存在多个表)

2、创建数据库储存路径

3、创建表

4、对表格进行增删改查等操作

上代码:

1、创建数据库单例对象,如图1

图 1

注意:创建单例的原因是保证数据库队列只创建一次,全局只有一个串行队列,这样操作数据更安全。

2、创建数据库路径和表格,如图 2

图 2

解析:单引号‘’中为表格的字段名,逗号后面为字段所属类型,字段类型是整形就用interger,字符串就用text。

注意:主键要想实现自动增长,不能是text类型。

我们看到,在沙盒中已经建好了表名为:JLcharacterModel 的数据库。如图3

图 3

3、进行数据库操作 ---增删改查

提示:建表,增删改 操作都是方法 "[_db executeUpdate]"或者"[_db executeStatements]",查询是另外的方法 "[_db executeQuery]"  。星号(*)是选取所有列的快捷方式。SQL 语句对大小写不敏感。SELECT 等效于 select。

1 ) INSERT INTO 

INSERT INTO 语句用于向表格中插入新的行。

语法:INSERT INTO 表名称 VALUES (值1, 值2,....)

也可以向指定的列插入数据:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

将数据写入表格,如图4(以下数据来源于卓浦士科技所属的app ---足球技能分析大师TropsX的云端数据,因为安全问题,将部分信息遮挡,敬请谅解)

图 4

注意!请注意:

 1)列名称和值名称的顺序要一一对应!例如:列名banner要对应自己的类型text。

 2)如果列名类型是NSString,则需要加单引号 ‘’ 括住,例如:'%@',只应用于字符串类型。

 3)对数据库进行操作增删改查之前要先打开数据库,操作完毕要关闭数据库。这只是一种严谨的写法,最好这样,否则可能会操作失败。

打开app本地数据库查看我们创建好的表格,如图 5

图 5

这时候你会发现,表格是空的!!!!!what ?

仔细一看,原来是创建表格的表名称写错了!!把 CharaterModel 改为 JLCharaterModel ,so,数据库路径的表名称跟插入数据写的表名称一定要相同!运行程序。铛铛铛~

图 6

注释:图 6 信息显示不全。

2)DELETE

DELETE 语句用于删除表中的行。

语法:DELETE FROM 表名称 WHERE 列名称 = 值,删除所有行:DELETE FROM 表名 或者DELETE * FROM 表名。

现在我们删除itemid为Shoe0101、Shoe0102这两行~ 代码如图 7。

图 7

来看看数据库是否已经删除成功,如图8:铛铛铛~

图 8

已经删除成功~

3)UPDATE

Update 语句用于修改表中的数据。

语法:更新某行的一列:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值。更新某行的若干列:UPDATE 表名称 SET 列名称1 = 新值1 ,列名称2 = 新值2 WHERE 列名称 = 某值。

将idNew为10000103的那一行 name改为静林是真的瓜子,status改为U,看代码:如图 9。

图 9

图10 看看更新成功了没有?

图 10

到这里就非常完美了~~

4)SELECT

SELECT 语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)。

语法:SELECT 列名称 FROM 表名称 或者 SELECT * FROM 表名称。

再次提示:星号(*)是选取所有列的快捷方式。SQL 语句对大小写不敏感。SELECT 等效于 select。

在讲update的时候已经写了一些select的语句了。通过条件查询,图 11看代码~

图 11

注意:获取结果集列顺序的时候,一定要取对类型,比如banner类型是字符串就要用stringForColumnIndex,整形就要使用intForColumnIndex,长整型就要使用longForColumnIndex,类型取不对,会导致返回的结果不对,切记!

查询itemid为Shoe0103的结果,通过断点,我们可以知道返回了一个带有属性的model,如图12:

图 12

通过关键字查询结果,如图13:

图 13

我们查询列名name有“瓜子”、expiredays == 90的结果,如图14:

图 14

可以看到得出一个结果~~

大坑注意:

 1)模糊查询时,需要自己拼接查询语句,不要使用框架提供的

2)'%' 是特殊字符,此时需要使用%转义.即 '%%'

3)自己拼接查询语句时,就需要自己添加单引号把字符串引起来

错误的拼接和执行模糊查询的方式:FMResultSet *resultSet = [_db executeQueryWithFormat:@"select * from t_heros where name like '%%%@%%'",keyWord];

正确的拼接和执行模糊查询的方式:NSString *selectSQL = [NSString stringWithFormat:@"select * from t_heros where name like '%%%@%%'",keyWord];

FMResultSet *resultSet = [_db executeQuery:selectSQL];

github链接https://github.com/ccgus/fmdb

参考文章http://www.brianjcoleman.com/framework-using-fmdb-to-communicate-with-sqlite-databases/

到这里就写完啦~希望对你有所帮助!不足之处敬请谅解并希望加以指正!QQ:1002282311 谢谢~~

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

推荐阅读更多精彩内容