1.什么是FMDB
FMDB是iOS平臺的SQLite數(shù)據(jù)庫框架
FMDB以O(shè)C的方式封裝了SQLite的C語言API
2.FMDB的優(yōu)點
使用起來更加面向?qū)ο笱滩∪チ撕芏嗦闊┤槿啤⑷哂嗟腃語言代碼
對比蘋果自帶的Core Data框架崖技,更加輕量級和靈活
提供了多線程安全的數(shù)據(jù)庫操作方法仗考,有效地防止數(shù)據(jù)混亂
我們使用FMDB的時候首先將FMDB使用cocopods導(dǎo)入到我們的工程中:pod 'FMDB'
之后在我們的工程中導(dǎo)入需要的頭文件即可:#import "FMDatabase.h"
開發(fā)中我們一般會把數(shù)據(jù)存儲到沙河路徑下
NSString * docPath=[[NSString alloc]init];
docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];//獲取沙河地址
NSLog(@"docPath==%@",docPath);
第一步設(shè)置數(shù)據(jù)庫名稱
NSString * fileName=[docPath stringByAppendingPathComponent:@"student.sqlite"];//設(shè)置數(shù)據(jù)庫名稱
FMDatabase * fmdb=[FMDatabase databaseWithPath:fileName];//創(chuàng)建并獲取數(shù)據(jù)庫信息
if ([fmdb open]) {
NSLog(@"數(shù)據(jù)庫打開成功蛀骇!");
}else{
NSLog(@"數(shù)據(jù)庫打開失敹谟浑此!");
}
第二步創(chuàng)建表
其中:
CREATE TABLE IF NOT EXISTS t_student 按照字面翻譯為如果不存在t_student,則創(chuàng)建表对人;
id integer PRIMARY KEY AUTOINCREMENT 字段id數(shù)據(jù)類型為integer類型,并且為基鍵自增拂共;
name text NOT NULL, age integer NOT NULL, sex text NOT NULL 字段name牺弄、sex的數(shù)據(jù)類型為text 默認為NULL(空),字段age 數(shù)據(jù)類型為integer 默認為NULL
// PRIMARY KEY AUTOINCREMENT 基鍵 并且自增
BOOL executeUpdate = [fmdb executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL, sex text NOT NULL);"];
if (executeUpdate) {
NSLog(@"創(chuàng)建表成功");
} else {
NSLog(@"創(chuàng)建表失敗");
}
第三步添加數(shù)據(jù)(插入數(shù)據(jù))
注意:
1.executeUpdate:不確定的參數(shù)用宜狐?來占位(后面參數(shù)必須是oc對象势告,;代表語句結(jié)束)
2.executeUpdateWithForamat:不確定的參數(shù)用%@抚恒,%d等來占位 (參數(shù)為原始數(shù)據(jù)類型咱台,執(zhí)行語句不區(qū)分大小寫)
int mark_student=1;
NSString *name = [NSString stringWithFormat:@"馬冬梅%@",@(mark_student)];
int age = mark_student;
NSString *sex = @"女";
mark_student ++;
BOOL results = [fmdb executeUpdate:@"INSERT INTO t_student (name, age, sex) VALUES (?,?,?)",name,@(age),sex];
// BOOL result = [fmdb executeUpdateWithFormat:@"insert into t_student (name,age, sex) values (%@,%i,%@)",name,age,sex];
//3.參數(shù)是數(shù)組的使用方式
// BOOL result = [fmdb executeUpdate:@"INSERT INTO t_student(name,age,sex) VALUES (?,?,?);" withArgumentsInArray:@[name,@(age),sex]];
if (results) {
NSLog(@"插入成功");
} else {
NSLog(@"插入失敗");
}
插入成功之后我們會看到相應(yīng)的數(shù)據(jù)
第四步刪除數(shù)據(jù)(注意同上)
這樣就看到之前id為2的馬冬梅2就被刪除了
int idNum=2;
BOOL deleate=[fmdb executeUpdate:@"delete from t_student where id = ?",@(idNum)];//按照id進行刪除
// BOOL deleate=[fmdb executeUpdateWithFormat:@"delete from t_student where name = %@",@"王子涵1"];//按照名字進行刪除
if (deleate) {
NSLog(@"刪除成功");
}else{
NSLog(@"刪除失敗");
}
第五步修改數(shù)據(jù)
我們將馬冬梅3修改為王小毛
//修改學(xué)生的名字
NSString *newName = @"王小毛";
NSString *oldName = @"馬冬梅3";
BOOL update=[fmdb executeUpdate:@"update t_student set name = ? where name =?",newName,oldName];
if (update) {
NSLog(@"修改成功");
} else {
NSLog(@"修改失敗");
}
第六步查詢數(shù)據(jù)
//查詢整個表
FMResultSet * resultSet = [fmdb executeQuery:@"select * from t_student"];
//根據(jù)條件查詢
//FMResultSet * resultSet = [fmdb executeQuery:@"select * from t_student where id < ?", @(4)];
//遍歷結(jié)果集合
while ([resultSet next]) {
int idNum = [resultSet intForColumn:@"id"];
NSString *name = [resultSet objectForColumnName:@"name"];
int age = [resultSet intForColumn:@"age"];
NSString *sex = [resultSet objectForColumnName:@"sex"];
NSLog(@"學(xué)號:%@ 姓名:%@ 年齡:%@ 性別:%@",@(idNum),name,@(age),sex);
}
這樣我們就完成了數(shù)據(jù)庫中的增、刪俭驮、改回溺、查,最后將我們的表刪除混萝。
//如果表格存在 則銷毀
BOOL result = [fmdb executeUpdate:@"drop table if exists t_student"];
if (result) {
NSLog(@"刪除表成功");
} else {
NSLog(@"刪除表失敗");
}
這樣就完整的將數(shù)據(jù)庫完整的操作了一遍~~~
歡迎指正R抛瘛!逸嘀!