
一、數(shù)據(jù)持久化的幾種方法
在iOS中將數(shù)據(jù)持久化總共有四招:
1.<b>歸檔(Archiver)、解歸檔(unArchiver)</b>,利用NSKeyedArchiver實(shí)現(xiàn)歸檔、利用NSKeyedUnarchiver解歸檔
2.<b>偏好設(shè)置(preference)</b>,利用NSUserDefaults
3.<b>屬性列表</b>
4.<b>數(shù)據(jù)庫(SQLite)</b>
5.<b>CoreData</b>
這5種持久化操作不同點(diǎn):
從存儲數(shù)據(jù)大小來看,歸檔、偏好設(shè)置、屬性列表種方法適合存儲數(shù)據(jù)量較小的數(shù)據(jù),數(shù)據(jù)庫、CoreData方法適合存儲數(shù)據(jù)量較大的數(shù)據(jù)。
從加密性來看,其中歸檔會將數(shù)據(jù)進(jìn)行加密,而偏好設(shè)置是直接保存到屬性列表中,不會對數(shù)據(jù)進(jìn)行加密。
從存儲類型上來看,屬性列表只能存放固定的7種數(shù)據(jù)類型(具體哪七種,這里不再介紹,可在plist文件中看到),歸檔則對存儲類型無限制。
補(bǔ)充:
歸檔就是將內(nèi)存中的對象寫入到磁盤文件中,歸檔也叫序列化,解歸檔就是將磁盤中文件中的對象讀取出來。
這里只是簡單介紹一下持久化幾種方法,??來重點(diǎn)介紹數(shù)據(jù)庫的基本操作。
二、數(shù)據(jù)庫的基本操作
其實(shí)說到數(shù)據(jù)庫,無非就是談對表的操作,說是對表的操作,無非就是<mark>增、刪、改、查</mark>,而“增刪改查”就一些sql語句的書寫。
數(shù)據(jù)庫就是由一張或多張表構(gòu)成的。??
NO.1 SQL語言的特點(diǎn)
- 簡單易學(xué)
- 不區(qū)分大小寫,比如if和IF(或iF、If )的意思是一樣一樣的~
- 每條語句結(jié)束都要以分號;結(jié)尾,與oc語言一樣一樣的~
- 數(shù)據(jù)庫中不可以用關(guān)鍵字來命名表、字段(比如
select、insert、update、from、create、where、order、by、group、table、view、index、alter等)
NO.2 SQL中的語句種類
1.數(shù)據(jù)定義語句 , 在數(shù)據(jù)庫中創(chuàng)建表和刪除表 create table 或drop table。
2.數(shù)據(jù)操作語句 , 添加、修改、刪除表中的數(shù)據(jù),insert、update、delete。
3.數(shù)據(jù)查詢語句 , select查詢表中的數(shù)據(jù)。
SQL語句字段類型
- integer :整型
- real :浮點(diǎn)值
- text :文本字符串
- blob :二進(jìn)制數(shù)據(jù)(比如文件)
- varchar :字符型
NO.3 操作語句
1.創(chuàng)建表
- create table 表名(字段1 字段類型1,字段2 字段類型2,…);
- create table if not exists 表名(字段1 字段類型1,字段2 字段類型2,……);
??
create table iOS_xiaoqiao(id integer,name text,age integer);
2.刪除表
drop table表名;
-
drop table if exists 表名;
??
drop table iOS_xiaoqiao;
3.增
-
insert into 表名(字段1,字段2,…);
??
insert into iOS_xiaoqiao (id,name,age) values(1,'xiaoqiao',18);??數(shù)據(jù)庫中的字符串內(nèi)容應(yīng)用單引號'括住
4.刪
-
delete from 表名;
??
delete from iOS_xiaoqiao;
????這句話會將表中的數(shù)據(jù)都刪除掉??
delete from iOS_xiaoqiao where name = 'xiaoqiao' and age = 18;
??這句話只會刪除這一條數(shù)據(jù)
5.改
-
update 表名 set 字段1 = 字段1的值,字段2 = 字段2的值,…;
??
update iOS_xiaoqiao set name = 'joe',age = 20;????這句話會將所有的數(shù)據(jù)替換成name=j(luò)oe age=20
??
update iOS_xiaoqiao set name = 'zhangsan' where age = 20;??這句話能夠?qū)ge =20的數(shù)據(jù)的name改為zhangsan
6.查
select 字段1,字段2,…from 表名;
-
select * from 表名; //查詢所有的字段
??
select name,age from iOS_xiaoqiao; select * from iOS_xiaoqiao; select * from iOS_xiaoqiao where age>18;
NO.4 其他
1.計(jì)算記錄的數(shù)量
- select count(字段)from 表名;
- select count (*) from 表名;
??
select count(age) from iOS_xiaoqiao;
select count(*) from iOS_xiaoqiao where age>10;
2.排序
查詢出來的結(jié)果可以用order by進(jìn)行排序
- select * from iOS_xiaoqiao order by 字段;
- select * from iOS_xiaoqiao order by age;
默認(rèn)是按照升序排序(由小到大),也可以變?yōu)榻敌颍ㄓ纱蟮叫。?/p>
- select * from iOS_xiaoqiao order by age desc; //降序
- select * from iOS_xiaoqiao order by age asc; //升序(默認(rèn))
也可以用多個(gè)字段進(jìn)行排序
- select * from iOS_xiaoqiao order by age asc,height desc;
先按照年齡排序(升序),年齡相等就按照身高排序(降序)
3.limit
使用limit可以精確地控制查詢結(jié)果的數(shù)量,比如每次只查詢10條數(shù)據(jù)
-
select * from 表名 limit 數(shù)值1, 數(shù)值2 ;
??
select * from iOS_xiaoqiao limit 4, 8 ;??可以理解為:跳過最前面4條語句,然后取8條記錄
limit常用來做分頁查詢,比如每頁固定顯示5條數(shù)據(jù),那么應(yīng)該這樣取數(shù)據(jù)
第1頁:limit 0, 5
第2頁:limit 5, 5
第3頁:limit 10, 5
…
第n頁:limit 5*(n-1), 5
select * from iOS_xiaoqiao limit 7 ;
??這條語句的作用相當(dāng)于select * from iOS_xiaoqiao limit 0, 7 ;表示取最前面的7條記錄
NO.5 約束
1.簡單約束
建表時(shí)可以給特定的字段設(shè)置一些約束條件,常見的約束有
not null :規(guī)定字段的值不能為null
unique :規(guī)定字段的值必須唯一
default :指定字段的默認(rèn)值
(建議:盡量給字段設(shè)定嚴(yán)格的約束,以保證數(shù)據(jù)的規(guī)范性)
??
create table iOS_xiaoqiao (id integer, name text not null unique, age integer not null default 1) ;
name字段不能為null,并且唯一
age字段不能為null,并且默認(rèn)為1
2.主鍵約束
(1)簡單說明
如果iOS_xiaoqiao表中就name和age兩個(gè)字段,而且有些記錄的name和age字段的值都一樣時(shí),那么就沒法區(qū)分這些數(shù)據(jù),造成數(shù)據(jù)庫的記錄不唯一,這樣就不方便管理數(shù)據(jù)
良好的數(shù)據(jù)庫編程規(guī)范應(yīng)該要保證每條記錄的唯一性,為此,增加了主鍵約束
也就是說,每張表都必須有一個(gè)主鍵,用來標(biāo)識記錄的唯一性
(2)什么是主鍵?
主鍵(Primary Key,簡稱PK)用來唯一地標(biāo)識某一條記錄
例如iOS_xiaoqiao可以增加一個(gè)id字段作為主鍵,相當(dāng)于人的身份證
主鍵可以是一個(gè)字段或多個(gè)字段
3)主鍵的設(shè)計(jì)原則
主鍵應(yīng)當(dāng)是對用戶沒有意義的
永遠(yuǎn)也不要更新主鍵
主鍵不應(yīng)包含動(dòng)態(tài)變化的數(shù)據(jù)
主鍵應(yīng)當(dāng)由計(jì)算機(jī)自動(dòng)生成
(4)主鍵的聲明
在創(chuàng)表的時(shí)候用primary key聲明一個(gè)主鍵
create table iOS_xiaoqiao (id integer primary key, name text, age integer) ;
integer類型的id作為t_student表的主鍵
主鍵字段
只要聲明為primary key,就說明是一個(gè)主鍵字段
主鍵字段默認(rèn)就包含了not null 和 unique 兩個(gè)約束
說明:如果想要讓主鍵自動(dòng)增長(必須是integer類型),應(yīng)該增加autoincrement
create table iOS_xiaoqiao (id integer primary key autoincrement, name text, age integer) ;
3.外鍵約束
利用外鍵約束可以用來建立表與表之間的聯(lián)系
外鍵的一般情況是:一張表的某個(gè)字段,引用著另一張表的主鍵字段
新建一個(gè)外鍵
create table iOS_xiaoqiao (id integer primary key autoincrement,
name text, age integer, class_id integer, constraint fk_student_class foreign key
(class_id) references t_class (id));
iOS_xiaoqiao表中有一個(gè)叫做fk_t_student_class_id_t_class_id的外鍵
這個(gè)外鍵的作用是用iOS_xiaoqiao表中的class_id字段引用t_class表的id字段
這里有個(gè)關(guān)于sqlite學(xué)習(xí)的軟件
本人Github中的一個(gè)關(guān)于fmdb的封裝demo
PS:如需轉(zhuǎn)載請注明iOS小喬http://www.itdecent.cn/users/f029d92cedc0/latest_articles
如果能夠幫到你,請你打賞支持我的創(chuàng)作(請小喬喝杯飲料??)
?小喬