鄭重聲明:本人ios初級開發(fā)者,為自己學(xué)習(xí)方便做粤,復(fù)制各位大神的學(xué)習(xí)性文章放在自己簡書里羊异,僅作為自己學(xué)習(xí)方便使用事秀,如果作者疑此行為侵權(quán),請隨時聯(lián)系本人刪除野舶,如有共同學(xué)習(xí)者復(fù)制此文章易迹,請注明原出處
一. 數(shù)據(jù)持久化
數(shù)據(jù)持久化是通過文件將數(shù)據(jù)存儲在磁盤上
-
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ù)
-
持久化方式的對比
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ù)庫操作流程
首先導(dǎo)入libsqlite3.0.tbd框架,在延展里面聲明兩個全局變量
sqlite 是一個指針變量或颊,用來操作數(shù)據(jù)庫
sqlite3 *sqlite;
結(jié)果集砸紊,用來存放查詢到的結(jié)果
sqlite3_stmt *stmt;-
打開數(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 指針賦值
-
編譯 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)用
-
執(zhí)行 SQL 語句唇辨,增刪改查或創(chuàng)表
int result = sqlite3_step(stmt) if (result == SQLITE_ERROR || SQLITE_MISUSE) { NSLog(@"執(zhí)行 SQL 語句失敗"); return; }
-
語句完結(jié)
sqlite3_finalize(stmt)
-
關(guān)閉數(shù)據(jù)庫
sqlite3_close(sqlite);
PS: 輔助方法
1. 綁定參數(shù)
sqlite3_bind_text()
2. 查詢字段上的數(shù)據(jù)
sqlite3_column_text()