這篇主要是使用FMDataBase創(chuàng)建簡單的數(shù)據庫表溢十,用來簡單的存儲數(shù)據
Demo地址
對應的實現(xiàn)文件如下:
存儲成功后的效果圖:
(存儲的文件是app.db,是一個數(shù)據庫文件邪乍,mac上我是使用DB Browser Fot SQLite進行查看的,非常好用的一個免費軟件)
FMDB框架存儲數(shù)據實際上就是操縱SQLite數(shù)據庫
首先签钩,新建一個文件Student,繼承自NSObject類遵绰,在里面定義一些常見的Student屬性
@interface Student : NSObject
@property (nonatomic, copy) NSString *id;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *college;//學院
@property (nonatomic, copy) NSString *university;
@property (nonatomic, assign) NSInteger age;
@end
之后烦感,創(chuàng)建一個用于操作數(shù)據庫的類,所有的關于數(shù)據庫的操作都封裝在里面
命名為DBHelper,繼承自NSObject
首先基茵,在存儲數(shù)據之前奋构,我們需要先判斷是否有相應的數(shù)據庫表,如果沒有則創(chuàng)建一個數(shù)據庫表拱层,如果有弥臼,那么直接存儲數(shù)據
所以,先進行建表操作
定義一些靜態(tài)常量
static NSString * const dbName = @"app.db";//數(shù)據庫名稱
static FMDatabase *db;//先不使用FMDataBaseQueue根灯,直接使用FMDataBase
static NSString * const kTableName = @"Student";
static NSString * const kColumnID = @"id";
static NSString * const kColumnName = @"name";
static NSString * const kColumnCollege = @"college";
static NSString * const kColumnUniversity = @"university";
static NSString * const kColumnAge = @"age";
創(chuàng)建文件我們使用的第三方框架FCFileManager径缅,數(shù)據庫使用的FMDB,記得使用cocoapods引入
之后烙肺,實現(xiàn)最初的建表操作纳猪,在DBHelper中
//數(shù)據庫路徑
+ (NSString *)dbFilePath {
return [FCFileManager pathForDocumentsDirectoryWithPath:dbName];
}
+ (void)initialize {
NSLog(@"數(shù)據庫的存儲路徑為:%@",[self dbFilePath]);
db = [FMDatabase databaseWithPath:[self dbFilePath]];
if (![db open]) {
NSLog(@"數(shù)據庫無法開啟");
}
//創(chuàng)建表
[self createTable:db];
}
//在數(shù)據庫中建表
+ (void)createTable:(FMDatabase *)db {
NSString *createSql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ ("
"%@ TEXT,"
"%@ TEXT,"
"%@ TEXT,"
"%@ TEXT,"
"%@ INTEGER)",
kTableName,
kColumnID,
kColumnName,
kColumnCollege,
kColumnUniversity,
kColumnAge
];
BOOL success = [db executeUpdate:createSql];
if (success) {
NSLog(@"創(chuàng)建表成功");
} else {
NSLog(@"創(chuàng)建表失敗");
}
}
之后,實現(xiàn)相應的數(shù)據庫操作的方法
這里實現(xiàn)了比較簡單的幾種操作
1.獲取數(shù)據庫中所有人的名字
2.刪除數(shù)據操作
3.存儲單條數(shù)據
4.存儲多條數(shù)據
在DB.helper.h中聲明方法
//獲取所有的名字
+ (id)getAllName;
//刪除數(shù)據
+ (BOOL)delete:(Student *)student;
//將數(shù)據存儲在FMDataBase中
+ (void)saveObject:(Student *)student;
//存儲多條數(shù)據進入表中
+ (void)saveObjects:(NSArray *)array;
具體的FMDB的操作建議去閱讀作者在github上的說明
獲取所有人的名字
````+ (id)getAllName {
NSString *searchSql = nil;
FMResultSet *set = nil;
searchSql = [NSString stringWithFormat:@"SELECT * FROM %@",kTableName];
set = [db executeQuery:searchSql];
//執(zhí)行sql語句桃笙,在FMDB中氏堤,除了查詢語句使用executQuery外,其余的增刪改查都使用executeUpdate來實現(xiàn)搏明。
int i = 0;
while (set.next) {
i++;
NSString *name = [set stringForColumn:@"name"];
NSLog(@"第%d個名字為:%@",i,name);
}
return @[];
}
刪除某個對象
+ (BOOL)delete:(Student *)student {
BOOL success = YES;
NSString *deleteSql = [NSString stringWithFormat:@"DELETE FROM %@ WHERE %@ = ?",kTableName,kColumnID];
BOOL isCan = [db executeUpdate:deleteSql,student.id];
if (!isCan) {
success = NO;
NSLog(@"刪除失敗");
} else {
NSLog(@"刪除成功");
}
return success;
}
存儲單個對象:
+ (void)saveObject:(Student *)student {
//如果原本已經存在了相同的鼠锈,則應該將其刪除
[self delete:student];
NSString *insertSql = [NSString stringWithFormat:@"INSERT INTO %@(%@,%@,%@,%@,%@) VALUES(?,?,?,?,?)",kTableName,kColumnID,kColumnName,kColumnCollege,kColumnUniversity,kColumnAge];
BOOL success = [db executeUpdate:insertSql,student.id,student.name,student.college,student.university,@(student.age)];
if (success) {
NSLog(@"插入數(shù)據成功");
} else {
NSLog(@"插入數(shù)據失敗");
}
}
存儲多個對象
+ (void)saveObjects:(NSArray *)array {
if (array.count <= 0) {
NSLog(@"保存的數(shù)據不能為空");
return;
}
for (int i = 0; i < array.count; i++) {
Student *student = (Student *)[array objectAtIndex:i];
if (student) {
[self saveObject:student];
}
}
}
之后,在FMDBViewController中初始化數(shù)據熏瞄,添加相應的按鈕和點擊事件即可
在FMDBViewContrller.h文件中
@property (nonatomic, strong) UIButton *dbSaveButton;
@property (nonatomic, strong) UIButton *dbReadButton;
@property (nonatomic, strong) NSMutableArray *array;
@property (nonatomic, strong) Student *student;
在FMDBViewController.m文件中
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.title = @"FMDB存儲數(shù)據";
self.navigationController.navigationBar.translucent = NO;
self.view.backgroundColor = [UIColor whiteColor];
[self.view addSubview:self.dbSaveButton];
[self.dbSaveButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.view);
make.centerY.equalTo(self.view);
make.width.greaterThanOrEqualTo(@0);
make.height.equalTo(@30);
}];
[self.view addSubview:self.dbReadButton];
[self.dbReadButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.view);
make.top.equalTo(self.dbSaveButton.mas_bottom).offset(20);
make.width.greaterThanOrEqualTo(@0);
make.height.equalTo(@30);
}];
//初始化數(shù)據
[self initStudent];
}
- (void)initStudent {
self.array = [NSMutableArray array];
Student *student1 = [[Student alloc] init];
student1.id = @"1234567";
student1.name = @"落葉兮兮";
student1.college = @"學院1";
student1.university = @"大學1";
student1.age = 23;
[self.array addObject:student1];
Student *student2 = [[Student alloc] init];
student2.id = @"1245467767";
student2.name = @"雪花飛舞";
student2.college = @"學院1";
student2.university = @"大學2";
student2.age = 23;
[self.array addObject:student2];
}
- (UIButton *)dbSaveButton {
if (_dbSaveButton) {
return _dbSaveButton;
}
_dbSaveButton = [[UIButton alloc] initWithFrame:CGRectZero];
_dbSaveButton.titleLabel.font = [UIFont systemFontOfSize:18];
[_dbSaveButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[_dbSaveButton setTitle:@"FMDataBase存儲數(shù)據" forState:UIControlStateNormal];
[_dbSaveButton addTarget:self action:@selector(fmDataBaseSaveData) forControlEvents:UIControlEventTouchUpInside];
return _dbSaveButton;
}
- (UIButton *)dbReadButton {
if (_dbReadButton) {
return _dbReadButton;
}
_dbReadButton = [[UIButton alloc] initWithFrame:CGRectZero];
_dbReadButton.titleLabel.font = [UIFont systemFontOfSize:18];
[_dbReadButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[_dbReadButton setTitle:@"FMDataBase讀取數(shù)據" forState:UIControlStateNormal];
[_dbReadButton addTarget:self action:@selector(fmDataBaseReadData) forControlEvents:UIControlEventTouchUpInside];
return _dbReadButton;
}
- (void)fmDataBaseSaveData {
NSLog(@"FMDB存儲數(shù)據");
[DBHelper saveObjects:self.array];
}
- (void)fmDataBaseReadData {
NSLog(@"FMDB讀取數(shù)據");
[DBHelper getAllName];
}
運行后就可以在文件app.db中看到我們插入的數(shù)據
總結
Demo地址
對應的實現(xiàn)文件如下:
存儲成功后的效果圖:
(存儲的文件是app.db,是一個數(shù)據庫文件脚祟,mac上我是使用DB Browser Fot SQLite進行查看的,非常好用的一個免費軟件)
iOS開發(fā)中數(shù)據持久化總結(一);
iOS開發(fā)中數(shù)據持久化總結(二):NSUserDefault實現(xiàn)數(shù)據存儲
ios開發(fā)中數(shù)據持久化總結(三):NSKeyArchive歸檔解檔的實現(xiàn)
ios開發(fā)中數(shù)據持久化總結(四):使用FMDataBase存儲數(shù)據