SQLite3 的介紹和 FMDB 框架的使用

1视译、 SQLite3 介紹

SQLite是一款輕型的嵌入式數(shù)據(jù)庫(kù)
它占用資源非常的低,處理速度快入蛆,高效而且可靠响蓉。
在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了哨毁。

  • 數(shù)據(jù)庫(kù):
    數(shù)據(jù)庫(kù)(Database)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織枫甲、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)。
  • 數(shù)據(jù)庫(kù)可以分為2大種類
1. 關(guān)系型數(shù)據(jù)庫(kù)(主流)
2. 對(duì)象型數(shù)據(jù)庫(kù)

常用的關(guān)系型數(shù)據(jù)庫(kù):
PC端:Oracle扼褪、MySQL想幻、SQL Server、Access话浇、DB2脏毯、 Sybase
嵌入式\移動(dòng)客戶端:SQLite

對(duì)象型型數(shù)據(jù)庫(kù):
remal , core date。

數(shù)據(jù)庫(kù)是如何存儲(chǔ)數(shù)據(jù)的:
數(shù)據(jù)庫(kù)的存儲(chǔ)結(jié)構(gòu)和excel很像幔崖,以表(table)為單位

** 數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的步驟 **

  1. 新建一個(gè)數(shù)據(jù)庫(kù)
  2. 新建一張表(table)
  3. 添加多個(gè)字段(column食店,列,屬性)
  4. 添加多行記錄(row赏寇,每行存放多個(gè)字段對(duì)應(yīng)的值)
  • SQLite3常用的5種數(shù)據(jù)類型:

    • text:文本字符串
    • integer:整數(shù)
    • real :浮點(diǎn)數(shù)
    • null :布爾值(true吉嫩,false)
    • blob: 二進(jìn)制數(shù)據(jù),比如文件嗅定,圖片之類的

    實(shí)際上SQLite是無(wú)類型的自娩。即不管你在創(chuàng)表時(shí)指定的字段類型是什么,存儲(chǔ)是依然可以存儲(chǔ)任意類型的數(shù)據(jù)渠退。而且在創(chuàng)表時(shí)也可以不指定字段類型忙迁。SQLite之所以什么類型就是為了良好的編程規(guī)范和方便開(kāi)發(fā)人員交流,所以平時(shí)在使用時(shí)最好設(shè)置正確的字段類型碎乃!主鍵必須設(shè)置成integer

  • SQLite 命令
    與關(guān)系數(shù)據(jù)庫(kù)進(jìn)行交互的標(biāo)準(zhǔn) SQLite 命令類似于 SQL姊扔。命令包括 CREATE、SELECT荠锭、INSERT旱眯、UPDATE、DELETE 和 DROP证九。這些命令基于它們的操作性質(zhì)可分為以下幾種:

    • DDL - 數(shù)據(jù)定義語(yǔ)言:
      命令 描述
      CREATE 創(chuàng)建一個(gè)新的表删豺,一個(gè)表的視圖,或者數(shù)據(jù)庫(kù)中的其他對(duì)象愧怜。
      ALTER 修改數(shù)據(jù)庫(kù)中的某個(gè)已有的數(shù)據(jù)庫(kù)對(duì)象呀页,比如一個(gè)表。
      DROP 刪除整個(gè)表拥坛,或者表的視圖蓬蝶,或者數(shù)據(jù)庫(kù)中的其他對(duì)象尘分。

    • DML - 數(shù)據(jù)操作語(yǔ)言
      命令 描述
      INSERT 創(chuàng)建一條記錄。
      UPDATE 修改記錄丸氛。
      DELETE 刪除記錄培愁。

    • DQL - 數(shù)據(jù)查詢語(yǔ)言
      命令 描述
      SELECT 從一個(gè)或多個(gè)表中檢索某些記錄。

      SQL 語(yǔ)句特點(diǎn)
      不區(qū)分大小寫(xiě)
      有關(guān)鍵字
      不可使用關(guān)鍵字命名表和字段

2缓窜、 SQLite3 的語(yǔ)法使用

SQLite 常見(jiàn)的操作語(yǔ)法:語(yǔ)法學(xué)習(xí)網(wǎng)站

  1. 表操作
    1.1 ** 創(chuàng)建表**
create table 表名(字段1    類型定续,字段2    類型)
/*
1、先判斷 t_demo 表是否存在禾锤,不存在我就創(chuàng)建私股,(這個(gè)是避免報(bào)錯(cuò))
2、設(shè)置 id 為主鍵恩掷,
3倡鲸、設(shè)置 id 是自增長(zhǎng) (只有integer 的數(shù)據(jù)才可以自增長(zhǎng))
*/
CREATE TABLE   IF   NOT EXISTS t_demo (id INTEGER  PRIMARY   KEY AUTOINCREMENT, name TEXT); 

1.2. 刪除表

drop table  表名
/*
1、進(jìn)行一次判斷黄娘,如果表存在就將表刪除(避免出錯(cuò))
*/
DROP  TABLE IF EXISTS t_demo
  1. 數(shù)據(jù)操作
    2.1 插入數(shù)據(jù) (增)
insert   into  表名 (字段1峭状,字段2)values (字段值1, 字段值2)逼争;  
/*
插入數(shù)據(jù)
*/
INSERT INTO t_demo (id, name) VALUES (5, 'zhangsan');

上一句只能運(yùn)行一次宁炫,第二次就報(bào)錯(cuò)(id 是自增長(zhǎng)的,每次插入一個(gè)固定值插不進(jìn)去)

INSERT INTO t_demo ( name) VALUES ('zhangsan');

注意點(diǎn):
數(shù)據(jù)庫(kù)插入操作中字符串使用 單引號(hào)

2.2 更新數(shù)據(jù) (改)

update   表名   set  字段1 = 字段1 的值氮凝,字段2 = 字段2的值。望忆。罩阵。
/*
更新數(shù)據(jù)
注意更新數(shù)據(jù)的時(shí)候不要更新主鍵
*/
UPDATE t_demo  SET   name = 'lisi';

(這個(gè)是更新name 下面的所有數(shù)據(jù)的值為 lisi,主要是沒(méi)有指定更新那一條數(shù)據(jù))
更新固定的數(shù)據(jù)

where 字段= 某個(gè)值启摄;
/*
修改指定的那條數(shù)據(jù)
*/
UPDATE t_demo SET name = 'lisi' WHERE id = 15;

2.3 刪除數(shù)據(jù)(刪)

delete from 表名
/*
刪除數(shù)據(jù)
*/
DELETE FROM t_demo;

(刪除表里面的所有數(shù)據(jù)稿壁,主要是沒(méi)有指定要?jiǎng)h除那些數(shù)據(jù))

/*
刪除指定的那條數(shù)據(jù)
*/
DELETE FROM t_demo WHERE id = 15;

2.4 查詢(查)

selete 字段1,字段2   歉备。傅是。。 from  表名
/*
查詢
*/
SELECT id FROM t_demo;
/*
    查詢所有字段
*/
SELECT * FROM t_demo;
  1. SQLite 高級(jí)操作
    3.1 起別名
    主要是給表起別名
    3.2 排序
selete * from  表  order by 字段蕾羊;默認(rèn)是升序

3.3 分頁(yè)

 select * frome表名  limit 數(shù)值1喧笔,數(shù)值2;
數(shù)值1:跳過(guò)幾條數(shù)據(jù)龟再。
數(shù)值2: 取幾條數(shù)據(jù)书闸。  

3、FMDB 簡(jiǎn)單介紹

  1. 什么是FMDB
    FMDB是iOS平臺(tái)的SQLite數(shù)據(jù)庫(kù)框架
    FMDB以O(shè)C的方式封裝了SQLite的C語(yǔ)言API

  2. FMDB的優(yōu)點(diǎn)
    使用起來(lái)更加面向?qū)ο罄眨∪チ撕芏嗦闊┙ⅰ⑷哂嗟腃語(yǔ)言代碼
    對(duì)比蘋(píng)果自帶的Core Data框架嫌术,更加輕量級(jí)和靈活
    提供了多線程安全的數(shù)據(jù)庫(kù)操作方法,有效地防止數(shù)據(jù)混亂

  3. FMDB的github地址
    https://github.com/ccgus/fmdb

  4. 核心類
    FMDB有三個(gè)主要的類
    (1)FMDatabase:一個(gè)FMDatabase對(duì)象就代表一個(gè)單獨(dú)的SQLite數(shù)據(jù)庫(kù)牌借,用來(lái)執(zhí)行 sql 語(yǔ)句度气。
    (2)FMResultSet:代表使用FMDatabase執(zhí)行查詢后的結(jié)果集
    (3)FMDatabaseQueue:用于在多線程中執(zhí)行多個(gè)查詢或更新,它是線程安全的

  5. 創(chuàng)建 SQLite 數(shù)據(jù)庫(kù)的三種方式
    (1)具體路徑:一個(gè)文件系統(tǒng)路徑膨报。磁盤(pán)上的文件不存在磷籍,就自動(dòng)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)文件。
    (2)空字符串@"" :會(huì)在臨時(shí)目錄創(chuàng)建一個(gè)空的數(shù)據(jù)庫(kù), 當(dāng)FMDatabase連接關(guān)閉時(shí)丙躏,數(shù)據(jù)庫(kù)文件也被刪除择示。
    (3)nil:會(huì)創(chuàng)建一個(gè)內(nèi)存中臨時(shí)數(shù)據(jù)庫(kù),當(dāng)FMDatabase連接關(guān)閉時(shí)晒旅,數(shù)據(jù)庫(kù)會(huì)被銷毀

// 創(chuàng)建數(shù)據(jù)庫(kù)
/*
設(shè)置數(shù)據(jù)庫(kù)保存在沙盒的Doc的文件夾
*/  
let cachePath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last
let sqliteDataBasePath = cachePath?.stringByAppendingString("/sqlite.db")
 
 // 這里 path 設(shè)置的為具體的路徑
 db = FMDatabase(path: sqliteDataBasePath)
        
 // 打開(kāi)數(shù)據(jù)庫(kù)
 if db!.open() {
      // 數(shù)據(jù)庫(kù)創(chuàng)建成功栅盲,并打開(kāi)
      print("數(shù)據(jù)庫(kù)創(chuàng)建成功,并打開(kāi)")
} else {
     // 數(shù)據(jù)庫(kù)創(chuàng)建失敗
      print("數(shù)據(jù)庫(kù)創(chuàng)建失敗")
}
  1. 數(shù)據(jù)庫(kù)操作的執(zhí)行 (增废恋,刪谈秫,改,查)
    數(shù)據(jù)庫(kù)執(zhí)行操作之前鱼鼓,必須將數(shù)據(jù)進(jìn)行打開(kāi),如果沒(méi)有足夠的資源或權(quán)限打開(kāi)和/或創(chuàng)建數(shù)據(jù)庫(kù), 打開(kāi)失敗拟烫。

在FMDB中,除查詢以外的所有操作迄本,都稱為“更新”
執(zhí)行更新返回一個(gè)值,一個(gè)布爾值硕淑。true 意味著更新成功執(zhí)行,false意味著一些錯(cuò)誤的返回值。你可以調(diào)用 lastErrorMessage 和 lastErrorCode 方法來(lái)獲取更多的信息嘉赎。

查詢操作
使用 一個(gè)executequery……方法來(lái)執(zhí)行 SELECT語(yǔ)句進(jìn)行查詢操作置媳。
執(zhí)行查詢會(huì)返回一個(gè)FMResultSet結(jié)果集對(duì)象,如果操作成功結(jié)果集將有值公条,失敗結(jié)果集將為nil拇囊。您應(yīng)該使用 lastErrorMessage 和 lastErrorCode 方法來(lái)確定查詢失敗的原因。

3靶橱、 SQLite3 在項(xiàng)目中使用

  1. 要使用 SQLite3 我們就必須要添加一個(gè) libsqlite3.dylib 類庫(kù)寥袭, 并導(dǎo)入頭文件。
    這是一個(gè)C語(yǔ)言的庫(kù)关霸,所以直接使用SQLite3還是比較麻煩的传黄。我們使用 OC 的封裝 FMDB

    20150423225952694.png

    20150423230336717.png

  2. SQLite3 是基于 c 語(yǔ)言的,我們使用 SQLite3 的 OC 的第三方類庫(kù) FMDB下載地址 https://github.com/ccgus/fmdb
    cocoapods 安裝 FMDB
    (cocoapods 安裝谒拴,不需要上面添加類庫(kù)的步驟)

$ pod 'FMDB'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尝江,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子英上,更是在濱河造成了極大的恐慌炭序,老刑警劉巖啤覆,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異惭聂,居然都是意外死亡窗声,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)辜纲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)笨觅,“玉大人,你說(shuō)我怎么就攤上這事耕腾〖#” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵扫俺,是天一觀的道長(zhǎng)苍苞。 經(jīng)常有香客問(wèn)我,道長(zhǎng)狼纬,這世上最難降的妖魔是什么羹呵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮疗琉,結(jié)果婚禮上冈欢,老公的妹妹穿的比我還像新娘。我一直安慰自己盈简,他們只是感情好凑耻,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著柠贤,像睡著了一般拳话。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上种吸,一...
    開(kāi)封第一講書(shū)人閱讀 52,807評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音呀非,去河邊找鬼坚俗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛岸裙,可吹牛的內(nèi)容都是我干的猖败。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼降允,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼恩闻!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起剧董,我...
    開(kāi)封第一講書(shū)人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤幢尚,失蹤者是張志新(化名)和其女友劉穎破停,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體尉剩,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡真慢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了理茎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黑界。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖皂林,靈堂內(nèi)的尸體忽然破棺而出朗鸠,到底是詐尸還是另有隱情,我是刑警寧澤础倍,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布烛占,位于F島的核電站,受9級(jí)特大地震影響著隆,放射性物質(zhì)發(fā)生泄漏扰楼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一美浦、第九天 我趴在偏房一處隱蔽的房頂上張望弦赖。 院中可真熱鬧,春花似錦浦辨、人聲如沸蹬竖。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)币厕。三九已至,卻和暖如春芽腾,著一層夾襖步出監(jiān)牢的瞬間旦装,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工摊滔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阴绢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓艰躺,卻偏偏與公主長(zhǎng)得像呻袭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子腺兴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容