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

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

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

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

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

    1>屬性列表:就是plist文件,使用時(shí),需要知道文件名,只適合NSArray、NSString等基本數(shù)據(jù)類型,
    2>對象歸檔:NSKeyedArchiver,必須實(shí)現(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è)計(jì)目標(biāo)是嵌入式的,目前很多的嵌入式產(chǎn)品中都使用了它,它占用資源非常低,在嵌入式設(shè)備中,可能只需要幾百 K 的內(nèi)存就夠了。

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

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

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

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

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框架,在延展里面聲明兩個(gè)全局變量
    sqlite 是一個(gè)指針變量,用來操作數(shù)據(jù)庫
    sqlite3 *sqlite;
    結(jié)果集,用來存放查詢到的結(jié)果
    sqlite3_stmt *stmt;

  2. 打開數(shù)據(jù)庫,如果路徑上沒有這個(gè)數(shù)據(jù)庫,系統(tǒng)就會自動創(chuàng)建一個(gè)數(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ù)庫指針。這句代碼運(yùn)行完成以后會給 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:返回一個(gè)結(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:序號,也就是說綁定到第幾個(gè)問號
    參數(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)系作者
【社區(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)容