用戶配置(NSUserDefault),plist,歸檔(NSKeyedArichiver), 寫入磁盤, 數據庫(sqlite/coreData) git
1》建庫 github
NSString *doc =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) lastObject]; 正則表達式
//該文件路徑無需真實存在,若是不存在會自動建立 sql
//路徑爲@「」:表示會在臨時目錄建立一個空的數據庫,當FMDatabase鏈接關閉時,文件也會被刪除數據庫
//路徑爲NULL:將建立一個內在數據庫,一樣的,當FMDatabase鏈接關閉時,數據將會被銷燬 數組
NSString *fileName = [doc stringByAppendingPathComponent:@"student.sqlite"]; 瀏覽器
FMDatabase *db = [FMDatabase databaseWithPath:fileName];spa
2》打開庫 .net
[db open]firefox
3》建表
BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS myAir (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, type text NOT NULL);"];
4》添加數據
BOOL b= [db executeUpdateWithFormat:@"insert into myAir (name,type) values (%@,%@);",name,name];
往數據庫中添加了數據時候可以使用火狐瀏覽器安裝SQLite Manager 查看sqlite 文件的數據: https://addons.mozilla.org/zh-cn/firefox/addon/sqlite-manager/
5》刪除
BOOL b=[db executeUpdateWithFormat:@"delete from myAir where id = %d;",1];
6》修改
BOOL b= [db executeUpdate:@"update myAir set name = ? where id = ?",@"M999",@"1"];
7》查詢並讀取數據
//查詢整個表的數據
FMResultSet *resultSet = [db executeQuery:@"select * from myAir;"];
//按條件模糊查詢
FMResultSet *resultSet2 = [db executeQuery:[NSString stringWithFormat:@"select * from myAir where name like '%%%@%%';",@"5"]];
注意: 模糊查詢 like '% 5%' 在oc 中 打印% 須要兩個 %%
//讀取數據
while ([resultSet next]){
NSString *name = [resultSet objectForColumn:@"name"];
[_dataList addObject:name];
}
8》關閉數據庫
[db close];
1》添加
[對象 MR_createEntity]
2》刪除
[對象名 MR_deleteEntity];
3》查詢
a: 查找全部 : [對象 MR_findAll];
b:根據條件查詢:
b1 :使用謂詞 NSPredicate
如: NSPredicate *pre=[NSPredicate predicateWithFormat:@"name CONTAINS %@",@"5"];
ENDSWITH 表示以什麼結尾;BEGINSWITH 表示以什麼開頭;CONTAINS 表示是否包含指定字符或字符串;LIKE 模糊查找 * 表明0個或多個字符,?表明一個字符;MATCHES 匹配正則表達式
[對象 MR_findAllWithPredicate:pre ];
[對象 MR_ascendingSortDescriptors:要排序的數組名]; //對某數組進行排序
b2: 根據實體屬性名對應的值進行查找
如:[對象 MR_findByAttribute:@"name" withValue:@"張三"]; //將對象中 name=張三的人找出來
NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; //對name 屬性進行排序 ascending:yes 遞增 遞減
b3: 對多個列進行排序
NSArray *result = [Note findAllSortedBy:@"date:NO,name" ascending:YES];
//表示 date 字段降序,name字段升序。
4》修改
//先查找出要修改的對象再進行修改
NSPredicate *pre=[NSPredicate predicateWithFormat:@"id = %@",@"1"];
NSArray *obj= [Person MR_findAllWithPredicate:pre ];
for (Person *p in obj) {
p.name=@"other";
}
5》注意: 除了查詢以外 ,對實體進行操做了以後,都要加上如下語句
[[NSManagedObjectContext MR_defaultContext]MR_saveToPersistentStoreAndWait];
6》MagicalRecord 中NSpredicate的使用和延伸: http://blog.csdn.net/sinat_25544827/article/details/45956169
7》數據庫的遷移
3. sqlite 與coreData 的比較
sqlite: 須要使用sql語句,使用起來比較麻煩,代碼量較大。
coreData:操做簡單,容易理解。