鄭重聲明:本人ios初級開發(fā)者,為自己學(xué)習(xí)方便,復(fù)制各位大神的學(xué)習(xí)性文章放在自己簡書里,僅作為自己學(xué)習(xí)方便使用,如果作者疑此行為侵權(quán),請隨時(shí)聯(lián)系本人刪除,如有共同學(xué)習(xí)者復(fù)制此文章,請注明原出處
一. 數(shù)據(jù)持久化
數(shù)據(jù)持久化是通過文件將數(shù)據(jù)存儲在磁盤上
-
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ù) -
持久化方式的對比
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ù)庫操作流程
首先導(dǎo)入libsqlite3.0.tbd框架,在延展里面聲明兩個(gè)全局變量
sqlite 是一個(gè)指針變量,用來操作數(shù)據(jù)庫
sqlite3 *sqlite;
結(jié)果集,用來存放查詢到的結(jié)果
sqlite3_stmt *stmt;-
打開數(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 指針賦值 -
編譯 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)用 -
執(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()