SQLite數(shù)據(jù)庫淺析

鄭重聲明:本人ios初級開發(fā)者,為自己學(xué)習(xí)方便做粤,復(fù)制各位大神的學(xué)習(xí)性文章放在自己簡書里羊异,僅作為自己學(xué)習(xí)方便使用事秀,如果作者疑此行為侵權(quán),請隨時聯(lián)系本人刪除野舶,如有共同學(xué)習(xí)者復(fù)制此文章易迹,請注明原出處

一. 數(shù)據(jù)持久化

數(shù)據(jù)持久化是通過文件將數(shù)據(jù)存儲在磁盤上

  1. iOS 主要有四中數(shù)據(jù)持久化方式

    1>屬性列表:就是plist文件,使用時平道,需要知道文件名睹欲,只適合NSArray、NSString等基本數(shù)據(jù)類型一屋,
    2>對象歸檔:NSKeyedArchiver窘疮,必須實現(xiàn)NSCoding協(xié)議方法
    3>SQLite數(shù)據(jù)
    4>CoreData:大型數(shù)據(jù)
    5>NSUserDefaults 偏好設(shè)置 ,不需要知道文件名冀墨,小數(shù)據(jù)       
    
  2. 持久化方式的對比

    1>屬性列表闸衫、對象歸檔適合小數(shù)據(jù)量存儲和查詢操作
    2>SQLite、CoData適合大量數(shù)據(jù)存儲和查詢
    

二. 數(shù)據(jù)庫介紹

  數(shù)據(jù)庫(DataBase)是按照數(shù)據(jù)結(jié)構(gòu)來組織诽嘉、存儲和管理數(shù)據(jù)的倉庫

  數(shù)據(jù)庫管理系統(tǒng)是一種操縱和管理的大型軟件蔚出,用于建立、使用和維護(hù)數(shù)據(jù)庫虫腋,常見的關(guān)系數(shù)據(jù)庫管理系統(tǒng)有:Oracle/MSSQLserver/DB2/MySQL

三.SQL介紹

 SQLite,是一款輕型的數(shù)據(jù)庫(按照數(shù)據(jù)庫結(jié)構(gòu)來組織骄酗、存儲和管理數(shù)據(jù)的倉庫),是遵守 ACID 的關(guān)系型數(shù)據(jù)管理系統(tǒng)悦冀,它的設(shè)計目標(biāo)是嵌入式的趋翻,目前很多的嵌入式產(chǎn)品中都使用了它,它占用資源非常低盒蟆,在嵌入式設(shè)備中踏烙,可能只需要幾百 K 的內(nèi)存就夠了。

四.基礎(chǔ)的 SQL 語句

SQL 語句用于對數(shù)據(jù)進(jìn)行存儲历等、查詢宙帝,更新等管理操作

1.  創(chuàng)建列表 SQLite3支持 NULL、INTEGER募闲、REAL(浮點數(shù)字)步脓、TEXT(字符串文本)和 BLOB(二進(jìn)制對象)數(shù)據(jù)類型,如果表存在則不再創(chuàng)建

    實際上 SQLite 是無類型的,雖然聲明 Integer類型靴患,還是可以存儲字符串文本(主鍵除外)仍侥,創(chuàng)建表時聲明啥類型或者不聲明類型都可以,但是為了良好的編程規(guī)范鸳君、方便程序員之間的交流农渊,編寫建表語句的時候最好還是加上字段類型

CREATE TABLE IF NOT EXISTS user(username TEXT PRIMARY KEY,password TEXT, email TEXT)

2.  插入一條數(shù)據(jù)

  INSERT INTO user(username,password,email)VALUES(?,?,?);

3.  刪除一條數(shù)據(jù)

DELETE FROW user WHERE username = 'puke'

4.  更新一條數(shù)據(jù)

 UPDATE user set password = '123456' where username = 'puke';

5.  查詢數(shù)據(jù)

SELECT user,password,email FORM user where username = 'puke';

五. 數(shù)據(jù)庫操作流程

  1. 首先導(dǎo)入libsqlite3.0.tbd框架,在延展里面聲明兩個全局變量
    sqlite 是一個指針變量或颊,用來操作數(shù)據(jù)庫
    sqlite3 *sqlite;
    結(jié)果集砸紊,用來存放查詢到的結(jié)果
    sqlite3_stmt *stmt;

  2. 打開數(shù)據(jù)庫,如果路徑上沒有這個數(shù)據(jù)庫囱挑,系統(tǒng)就會自動創(chuàng)建一個數(shù)據(jù)庫

       int result = sqlite3_open?([filePath UTF8String], &sqlite);
    
         if (result != SQLITE_OK) {
    
         NSLog(@"打開數(shù)據(jù)庫失敗");
    
          }
          參數(shù)1:數(shù)據(jù)庫所在的路徑醉顽,由于 sqlite 是 C 語言編寫的,通過[filePath UTF8String]將 OC 的字符串轉(zhuǎn)化為 C 的字符串
    
          參數(shù)2:數(shù)據(jù)庫指針平挑。這句代碼運行完成以后會給 sqlite 指針賦值
    
  3. 編譯 SQL語句

    NSString *sql = @"INSERT INTO User(name, age) VALUES (? ? ?)";
    
    sqlite3_prepare_v2(sqlite, [sql UTF8String], -1, &stmt, NULL);
    
    參數(shù)1:數(shù)據(jù)庫指針
    參數(shù)2:sql 語句游添,使用 UTF-8編碼
    參數(shù)3:sql 語句執(zhí)行的字節(jié)長度, -1表示該語句全部執(zhí)行
    參數(shù)4:返回一個結(jié)果集
    參數(shù)5:存放沒有執(zhí)行的 sql 語句
    

    參數(shù)綁定

    sqlite3_bind_text(stmt, 1, [name UTF8String], -1, NULL);
    
    sqlite3_bind_int(stmt, 2, age);
    
    參數(shù)1:數(shù)據(jù)庫指針
    參數(shù)2:序號通熄,也就是說綁定到第幾個問號
    參數(shù)3:綁定的數(shù)據(jù)
    參數(shù)4:sqlite 語句執(zhí)行字節(jié)長度唆涝, -1表示該語句全部執(zhí)行
    參數(shù)5:回調(diào)函數(shù),語句執(zhí)行完畢后會調(diào)用
    
  4. 執(zhí)行 SQL 語句唇辨,增刪改查或創(chuàng)表

      int result = sqlite3_step(stmt)
    
      if (result == SQLITE_ERROR || SQLITE_MISUSE) {
    
            NSLog(@"執(zhí)行 SQL 語句失敗");
    
                 return;
       }
    
  5. 語句完結(jié)

      sqlite3_finalize(stmt)
    
  6. 關(guān)閉數(shù)據(jù)庫

      sqlite3_close(sqlite);
    

PS: 輔助方法

1.  綁定參數(shù)

  sqlite3_bind_text()

2.  查詢字段上的數(shù)據(jù)

  sqlite3_column_text()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末廊酣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赏枚,更是在濱河造成了極大的恐慌亡驰,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗡贺,死亡現(xiàn)場離奇詭異隐解,居然都是意外死亡鞍帝,警方通過查閱死者的電腦和手機(jī)诫睬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帕涌,“玉大人摄凡,你說我怎么就攤上這事◎韭” “怎么了亲澡?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纫版。 經(jīng)常有香客問我床绪,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任癞己,我火速辦了婚禮膀斋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痹雅。我一直安慰自己仰担,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布绩社。 她就那樣靜靜地躺著摔蓝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪愉耙。 梳的紋絲不亂的頭發(fā)上贮尉,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機(jī)與錄音劲阎,去河邊找鬼绘盟。 笑死,一個胖子當(dāng)著我的面吹牛悯仙,可吹牛的內(nèi)容都是我干的龄毡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼锡垄,長吁一口氣:“原來是場噩夢啊……” “哼沦零!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起货岭,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤路操,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后千贯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屯仗,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年搔谴,在試婚紗的時候發(fā)現(xiàn)自己被綠了魁袜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡敦第,死狀恐怖峰弹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芜果,我是刑警寧澤鞠呈,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站右钾,受9級特大地震影響蚁吝,放射性物質(zhì)發(fā)生泄漏旱爆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一窘茁、第九天 我趴在偏房一處隱蔽的房頂上張望疼鸟。 院中可真熱鬧,春花似錦庙曙、人聲如沸空镜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吴攒。三九已至,卻和暖如春砂蔽,著一層夾襖步出監(jiān)牢的瞬間洼怔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工左驾, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留镣隶,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓诡右,卻偏偏與公主長得像安岂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子帆吻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

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