SQLite数据库

SQLite数据库

1.数据库简介

1.1数据库的作用:"离线缓存数据"

1.2数据缓存策略

plist

归档

偏好设置

沙盒文件

"SQLite数据库"

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

不方便操作大量的数据

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

不方便查找大量的数据

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

代码演示plist文件保存数据

1.4SQLite简介

SQLite是一个轻量级,体积小,嵌入式,功能强大,跨平台的数据存储方式

客户端的数据库: SQLite

服务器端的数据库: MySQL --> SQLServer --> Oracle

1.5学习方式

先用Navicat客户端演示SQLite的使用(仅仅是上课演示而已,不需要掌握)

再用代码演示SQLite的使用(需要熟练使用)

2.Excel存储数据

2.1提示: SQLite数据库存储数据的结构和Excel很像

"Excel""SQLite"

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

-创建表-创建表

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

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

2.2一个数据库中,可以有多张表,每个表中可以存储不同的数据

3.Navicat存储数据-创建数据库和表

3.1提示:数据库本身就是一个文件,可以用终端和客户端来创建和操作

3.2Navicat创建数据库和表的步骤:

1.创建一个数据库文件,以".sqlite"结尾

2.建立Navicat和数据库文件的连接,只有建立好连接才能操作数据库文件

3.创建数据库表,创建表头并指定数据类型

4.保存数据库文件,以"t_xxx"命名

4.Navicat操作数据-增删改查

4.1在数据库中

行:记录/数据(一条记录/一条数据)

列:字段名/列名

4.2增删改查操作

新增:'+'

删除:'-'

修改:双击字段直接修改

查询:'filter'(过滤)

4.3以上操作都是在Navicat客户端操作的,实际开发中是在Xcode中写代码.

5.SQL语句之数据定义语句-创建和删除表

iOS             OC

Android         JAVA

SQLite数据库"SQL语句"

5.1SQL语句:一个通用的数据库语言,适用于客户端数据库(SQLite)和服务器端数据库(MySQL,SQLServer,Oracle)

5.2客户端的SQL语句需要掌握:"数据定义语句","数据操作语句","条件语句","数据查询语句"

5.3数据定义语句:创建(create)和删除(drop)数据库表

-创建数据库表:

create tableifnot exists表名(字段名1类型,字段名2类型,...);

"create table if not exists t_product(productID integer,productName text,productPrice integer);"

-删除数据库表

drop tableifexists表名;

"drop table if exists t_product;"

6.SQL语句之数据操作语句-增删改

-提示:到目前为止数据库和数据库表都已经创建好了,现在开始就是操作数据库

6.1新增语句

insert into表名(字段名1,字段名2,...) values(字段1值,字段2值,...);

"insert into t_product(productID,productName,productPrice) values(1005,'iPhone103',2000);"

注意:字符串用'单引号'引起来

6.2删除语句

delete from表名where条件语句;

"delete from t_product where productPrice = 1000;"

注意:如果执行删除语句时不加条件语句,就会删除表中所有的记录

6.3修改语句

不加条件时,所有的productPrice字段的值都会修改成103

"update t_product set productPrice = 103;"

按照条件修改一个字段的值

"update t_product set productPrice = 333 where productID = 1005;"

按照条件,修改一条记录的多个字段

"update t_product set productName = 'iPHone1000',productPrice = 1000 where productID = 1002;"

7.SQL语句之查询语句(相当重要)

7.1准备工作:执行提前准备好的新增语句,准备要查询的数据

7.2查询语句体验

查询价格大于5500的商品信息

"select * from t_product where productPrice > 5500;"

查询价格小于4000或者价格大于5500的商品信息

"select * from t_product where productPrice < 4000 or productPrice > 5500;"

查询商品编号小于100并且价格小于4000的商品信息

"select * from t_product where productID < 100 and productPrice < 4000;"

注意:"select *"是查找表中的所有字段

8.排序和分页查找

8.1排序

提示:分页和排序都是在某个查询结果后面执行进行的

使用场景:电商类APP中的商品按照价格的从高到低筛选展示

查询出来的数据,按照价格从低到高排序

"select * from t_product where productID < 100 and productPrice < 4000 order by productPrice;"

查询出来的数据,按照价格从高到低排序

"select * from t_product where productID < 100 and productPrice < 4000 order by productPrice desc;"

注意:"order by"是默认从低到高;"desc"是从高到低

8.2分页查询

从第0条开始查询,查询五条记录

"select * from t_product where productID < 100 and productPrice < 4000 order by productPrice desc limit 0,5;"

"limit 0,5":分页语句;索引,每页条数.从第0条开始查询,每页查询五条记录

规律:

第1页: limit0,5

第2页: limit5,5

第3页: limit10,5

...

第n页: limit (n-1)*每页条数,每页条数

注意:

当取到最后,记录不足每页条数时,就取实际剩下的记录

分页语句放在查询语句的后面

9.模糊查询

9.1使用场景:关键字搜索

查找商品价格中带99的商品

"select * from t_product where productPrice like '%99%';"

查找商品价格中带99的商品,按照价格从高到低排序

"select * from t_product where productPrice like '%99%' order by productPrice desc;"

查找商品价格中带99的商品,按照价格从高到低排序,取前面五条

"select * from t_product where productPrice like '%99%' order by productPrice desc limit 0,5;"

10.主键字段

10.1提示:

当有两条记录是一样的时候,可以使用主键字段来区别

主键可以自增长,数据库建议我们每个表中都要有主键字段

10.2主键字段演练

增加字段(了解)

"alter table t_studentInfo add id_replace integer;"

新建表,并设置主键字段

"create table if not exists t_class(id integer primary key,className text not null,classNO integer);"

10.3注意:

"primary key":某某字段为主键

"not null":某某字段不能为空

11.Xcode之原生SQLite -创建数据库和表

11.1提示:导入头文件"#import ";新增类库"libsqlite3.0.tbd"

11.2使用步骤

1.创建数据库

2.打开数据库

3.建表(t_person)

4.操作表

11.3注意:

- sqlite3中的函数都是以sqlite3开头的

-创建并打开数据库函数: sqlite3_open

-建表和数据操作函数(查询函数除外) : sqlite3_exec

12.Xcode之原生SQLite -数据增删改查

-建表和数据操作函数(查询函数除外) : sqlite3_exec

-查询函数: sqlite3_prepare_v2

-查询数据时会得到结果集,要查询的数据都在结果集中,while循环遍历结果集一条一条记录取出来

13.FMDB -创建数据库和表

13.1FMDB简介

- FMDB是一个操作数据库的第三方框架,并且支持多线程环境下的操作

-也是需要手动导入'libsqlite3.0.tbd'库

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

13.2演练保存Heros模型数据

准备模型类和保存模型数据的工具类

13.3FMDB使用步骤:

1.创建数据库

2.打开数据库

3.创建表

4.增删改查

13.4注意:

-创建数据库和建表只需要执行一次,可以在"+ (void)initialize"方法中实现

-建表,增删改操作都是同一个方法"[_db executeUpdate]"

-查询是另外的方法"[_db executeQuery]"

15.FMDB增删改查

15.1新增操作

[_db executeUpdateWithFormat:@"insert into t_heros(name,age) values(%@,%@)",hero.name,hero.age];

15.2删除操作

[_db executeUpdateWithFormat:@"delete from t_heros where name = %@",hero.name];

15.3修改操作

[_db executeUpdateWithFormat:@"update t_heros set name = %@ where id = 3",hero.name];

15.4查询操作

-需求:把查询出来的数据展示在列表上

- UI准备:准备好列表

-数据准别

获取结果集: FMResultSet *resultSet = [_db executeQuery:@"select * from t_heros"];

while循环遍历结果集,把遍历出来的数据转成模型数据,并添加到模型数组

取结果集中的数据: NSString *name = [resultSet stringForColumn:@"name"];

16.FMDB模糊查找-关键字搜索

16.1注意:

1.大坑提示:模糊查询时,需要自己拼接查询语句,不要使用框架提供的

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

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

16.2自己拼接模糊查询语句

-错误的拼接和执行模糊查询的方式

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];

17.多线程操作数据库的问题及解决办法

-问题:当有多个线程同时操作一个数据库时,只有一个数据会写入.

-解决办法:让FMDatabaseQueue(串行队列)来管理数据库对象.多个操作按顺序来进行

18.封装FMDataBaseQueue单例

新建单例类,继承自FMDataBaseQueue,保证只创建一次

把FMDatabaseQueue定义成单例的目的是为了保证队列在内存中是唯一的一个,当有多个数据库操作任务时,都可以放在同一个队列中

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

推荐阅读更多精彩内容