iOS中,使用的是SQLite数据库
但是原生SQLite用起来比较麻烦,所以FMDB对他进行了封装
通过FMDB,可以使用SQL语句进行数据库操作
SQLite数据库
1、数据库
数据库(Database/DB)是一种以数据模型组织起来并存放存储管理数据的数据仓库
(数据存到磁盘上,仍然保留原有的数据模型结构。可以直接进行选择,筛选,添加,删除等管理操作)
数据库是数据管理的高级阶段,它是由文件管理系统发展起来的。
数据库是个文件,操作对数据的增、删、改、查。由统一数据库软件来进行管理和控制。
2、众多的数据库
Access
Oracle
SQLite
DB2
Mysql
3、SQLite数据库
SQLite官网:http://www.sqlite.org
SQLite是几乎所有的手机系统(iOS,Android,Symbian,Blackberry,Lumia,Limo等)的标准数据库
SQLite数据库中的表单由行和列组成
比如“演员”数据库中,可以有男演员,女演员两个表单。表单类似数据模型,因此列,就称为数据模型的字段。每条记录就是数据模型的一个实例对象。
ID 演员 国籍
———————————————————————
1 舒淇 中国香港
2 李丽珍 中国香港
3 苍井空 日本
4 松岛枫 日本
5 奥巴马 美国
列(字段/域):ID 演员 国籍
5行数据: 一行数据组合到一起称为一条记录
【注】操作数据库,需要数据库操作软件和操作语句。
SQL语句
SQL语句通常写作(Structured Query Language),是专门操作数据库的一种语言。
【特征】
<1>所有数据在表单中进行管理
<2>数据没有顺序,至少SQL不区分顺序
<3>语句不区分大小写
<4>表单中必须有主键列,每个主键唯一
1、SQL中的数据类型
integer: 整型数据,大小为4个字节。
bigint: 整型数据,大小为8个字节。
smallint: 整型数据,大小为2个字节。
tinyint: 正整型数据,大小为1个字节。
float: 浮点数据,大小为4个字节。
double: 浮点数据,大小为8个字节。
real: 浮点数据,大小8个字节。
char(n): 非变长字符串,不超过n个字符(n < 255) //不够n,仍然存储n个字节
varchar(n): 变长字符串,不超过n个字符(n <= 4000)//最常用 存储空间,随字符串到小改变text: 变长非unicode字符串,存储超大数据(n <= 2^31-1)date: 日期数据,年份-月份-日期time: 时间数据,时:分:秒datetime: 日期时间数据,年份-月份-日期 时:分:秒timestamp: 日期时间数据,年份-月份-日期 时:分:秒 毫秒blob: 二进制,BOOL值
null: 空
【注】字符串和日期时间,需要加入单引号,日期必须严格按照格式,如14年6月2日,必须写作2014-06-02,不能写作14-6-2,时间也一样需要补零。
2、SQL操作
1)创建表2)插入记录3)更新记录4)查询记录5)删除记录
6)删除表
3、where语句的筛选运算符
= 或 == 或 like 等于> 大于< 小于>= 大于等于<= 小于等于<> 不等于!> 不大于!< 不小于%舒% 包含子字符串”舒” (%:一个或多个字符)
4、基本sql语句
1. 创建表 create table [if not exists] 表名 ( 属性名 类型 ( 字符个数,可以省略 ) primary key autoincrement, 属性名 类型 ( 字符个数,可以省略 ) null( 不可以省略 ), 属性名 类型 ( 字符个数,可以省略 ) not null( 可以省略 ), 属性名 类型 ( 字符个数,可以省略 ) not null( 可以省略 ) ); autoincrement 自动增长 , 确保主键不会重复 primary key 主键 , 唯一标识一条记录 , 每个表都需要一个主键 . 注意 类型有 integer,text,blob 等 例如: create table if not exists Book ( id integer primary key autoincrement, name text, url text, des text );
2. 表中插入数据 (属性要全部写吗?不用; 可以插入一条数据吗?) insert into 表名 ( 属性名 1, 属性名 2, 属性名 3) values ('','',''); 例如 insert into Book (name,url,des) values (' 霍金全集 ',' www.baidu.com ',' 描述 '); insert into Book(name,url,des) values('JK','HarryPotter','magic'); insert into Book(name,url,des) values('Luxun','Nahan','chiren') insert into A select * from B insert into MyCollections select * from Home where id=1; 插入属性 alter table Book add column price float
3. 查询
select 字段名( * 代表所有字段,如果有多个字段用英文的 , 分割) from 表名字 [where 字段名 =‘’] order by 字段名 desc | asc; 注意: 1,where 判断 > , >= ,< , <=,between 字段 and 字段
2,desc 降序 asc 升序 select * from Book order by id desc 例如: ( 1 )查询表中所有字段数据
select * from Book; ( 2 )查询判断的条件 select * from Book where 字段名 =''; (3)select name,url from Book where name = ' 钢铁是怎么炼成的 ' where bool = 1
4. 模糊查询
% 替代一个或多个字符 _ 仅替代一个字符 select 字段名 from 表名 where 属性 like '% 关键字 %';
例如 select * from Book where name like '% 钢铁 %';
5. in查询 将在括号的内容查询出来 . not in 将不在括号中的内容查询出来
select 字段名 from 表名 where 字段名 in (' 关键字 ',' 关键字 '); 例如: select * from Book where name in (' 我的青春 ',' 钢铁是怎么炼成的 ');
6. 更新
update 表名 set 属性名 = ' 关键字 ' where 属性名 = 关键字
例如: update Book set url=' www.aaa.com ' where id = 2 update Book set price = 200 where id = 2
7. 删除数据
delete from 表名 where 属性名 = ' 关键字 '; 例如: delete from Book where name = ' 霍金全集 ';
8. 删除整张表 drop table 表名 ;
9. 添加属性 ( 字段 ) (删除属性?) alter table 表名 add column 属性名 类型 ; 例如: alter table Book add column price integer;
聚合函数
10. 求和 select sum( 属性名 ) from 表名 select sum(price) from Book select sum(id), sum(price) from Book 例如: select sum(age) from User NSInteger count = [rs intForColumn : @"sum(buyNum)" ];
11. 求平均值 select avg( 属性名 ) from 表名 例如: select avg(age) from User select avg(id), avg(price) from Book
12. 求最大值 select max( 属性名 ) from 表名 例如: select max(age) from User select max(id), max(price) from Book
13. 求最小值 select min( 属性名 ) from 表名 例如: select min(age) from User
14. 求元组个数 (求共几条数据?)
select count(*) from 表名 select count(distinct|all 属性名 ) from 表名 如果指定 DISTINCT 短语,则表示在计算时要取消指定列中的重复值。如果不指定 DISTINCT 短语或指定 ALL 短语( ALL 为缺省值),则表示不取消重复值。 消除重复 例如: select count(*) from User select count(distinct name) from User
FMDB使用
因为在程序的很多地方,都需要使用到数据库存储.为了避免每次都打开,关闭数据库,我们把它做成单例
获取单例的命名规则,一般用,defalut,standard,shareInstance
1.FMDB特性
2.使用FMDB操作数据库
1)打开数据库
- (instancetype)databaseWithPath:(NSString *)aPath;
开启数据库
open
2)关闭数据库
- (BOOL) close;
3)表创建
- (BOOL) executeUpdate:(NSString *)sql, ...;
4)增加一条记录
5)删除一条记录
6)修改一条记录
7)查询记录
- (FMResultSet *) executeQuery:(NSString *)sql, ...;
①遍历结果
是否有下一条记录
- (BOOL) next;
②获取数据
- (int)[数据类型]ForColumn:(NSString *)columnName;
- (int)[数据类型]ForColumnIndex:(int)
-stringForColumn:
8)删除表