CoreData
CoreData的使用步驟
- 建立模型檔案
- 新增實體
- 建立實體類
- 生成上下檔案 關聯模型檔案生成資料庫
- 儲存物件到資料庫
- 從資料庫獲取物件
- 更新資料
- 刪除資料
複製程式碼
資料持久化:是將一個資料儲存到檔案中,而不是記憶體中
CoreData簡單用法
/**
1. 建立模型檔案
2. 新增實體
3. 建立實體類(就是一張表)
4. 生成上下檔案 關聯模型檔案生成資料庫
*/
- (void)setUpCoreData {
/** 關聯的時候:如果本地沒有這個檔案,coreData會自己建立 */
/** 生成上下文 */
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
/** 模型檔案 */
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
/** 上下文要關聯資料庫 */
/** 持久化排程器 */
NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
/** 告訴CoreData資料庫的名字和路徑 */
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *sqlitePath = [doc stringByAppendingString:@"company.sqlite"];
[store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:nil];
context.persistentStoreCoordinator = store;
_context = context;
}
#pragma mark - 新增
- (IBAction)addEntity {
Entity *enti = [NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:_context];
enti.name = @"wangwu";
enti.hight = @2.30;
NSError *error = nil;
[_context save:&error];
if (error) {
NSLog(@"%@", error);
}
}
#pragma mark - 讀取員工
- (IBAction)readEntity {
/** 1. FetchRequest抓取物件 */
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Entity"];
/** 2. 設定過濾條件 */
NSPredicate *predic = [NSPredicate predicateWithFormat:@"name = %@", @"wangwu"];
request.predicate = predic;
/** 3. 排序 */
/** 身高的升序排序 */
NSSortDescriptor *heightSort = [NSSortDescriptor sortDescriptorWithKey:@"hight" ascending:YES];
request.sortDescriptors = @[heightSort];/*< 陣列的條件排序 */
/** 4. 執行請求 */
NSError *error = nil;
NSArray *arr = [_context executeFetchRequest:request error:&error];
if (error) {
NSLog(@"%@", error);
}
/** 遍歷陣列,讀取的內容 */
for (Entity *ti in arr) {
NSLog(@"%@, %@", ti.name, ti.hight);
}
}
#pragma mark - 更新員工
- (IBAction)updateEntity {
/** 更改張三 身高兩米 */
/** 1.查詢張三 */
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Entity"];
/** 設定過濾條件 */
NSPredicate *predic = [NSPredicate predicateWithFormat:@"name = %@", @"zhangsan"];
request.predicate = predic;
/** 執行請求 */
NSArray *enti = [_context executeFetchRequest:request error:nil];
/** 2.更新身高 */
for (Entity *en in enti) {
en.hight = @2.0;
}
/** 3.儲存 */
[_context save:nil];
}
#pragma mark - 刪除
- (IBAction)delete {
/** 找到list */
/** .查詢張三 */
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Entity"];
NSPredicate *predic = [NSPredicate predicateWithFormat:@"name = %@", @"zhangsan"];
request.predicate = predic;
NSArray *enti = [_context executeFetchRequest:request error:nil];
/** 刪除 */
for (Entity *entity in enti) {
[_context deleteObject:entity];
}
/** 儲存 */
[_context save:nil];
}
複製程式碼
資料庫軟體使用中的語句
- DDL:資料定義語句
- 建立表格
- create table if not exists + 表名 (欄位名1 欄位型別1,欄位名2 欄位型別2)
- 例子:create table if not exists t_class (id integer primary auto increment, name text);
- 刪除表格
- drop table if exists + 表名
- DML 資料操作源(增刪改查)
- 插入
- insert into + 表名 (欄位名) values (名)
- INSERT INTO t_class(name) VALUES ('哈哈哈哈');
- 更改
- update + 表名 set + 欄位名 = 欄位1的值
- UPDATE t_class SET name = '哈哈哈哈’;
- 這樣的更改是所有的都改
- 根據條件更改 (where)
- UPDATE t_student set name = 'qq' WHERE age < 10 and id , 50;
- 刪除
- delete from + 表名
- DELETE FROM t_class;
- 刪除記錄,不是刪除表
- DQL語句 用來查詢的
- 查詢
- SELECT name FROM t_class;
- select * from 查詢所有欄位
- 查詢後排序
- 降序:SELECT * FROM t_student ORDER BY age desc;
- 升序:SELECT * FROM t_student ORDER BY age asc;
- 約束 (建議給欄位設定嚴格的約束,以保證資料的規範性)
- not null:規定欄位的值不能為null
- unique:規定欄位的值必須唯一
- default:制定欄位的預設值
- create table t_student (id integer, name text not null unique, age integer not null default 1);
- name欄位不能為null,並且唯一
- age欄位不能為null,並且預設為1
- 建立表格