SQLite数据库以及FMDB的使用

本文介绍了SQLite数据库的基础概念及操作方法,并通过FMDB框架简化了iOS应用中的数据库管理流程。内容涵盖数据类型、SQL语句、表单创建、数据增删改查等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)删除表



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值