iOS中的持久化&&數(shù)據(jù)庫基本操作

屏幕快照 2016-02-25 下午5.57.26.png

一、數(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)鍵字來命名表、字段(比如selectinsert、updatefrom、create、where、orderby、grouptable、viewindex、alter等)

NO.2 SQL中的語句種類

1.數(shù)據(jù)定義語句 , 在數(shù)據(jù)庫中創(chuàng)建表和刪除表 create tabledrop 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 nullunique 兩個(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)作(請小喬喝杯飲料??)
?小喬

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容