[OC]数据库的使用--数据读取
接着上一篇博文,现在我们来实现数据库数据的读取~
首先来理下思路(好吧是我懵逼了-_-|||)

实例化一个fmdb对象MyDataManager,用来进行对数据库的操作,创建一个数据模型Model用来存放从数据库读取的数据,ViewController方便从Model读取数据。
step1:
新建一个继承与NSObject的类MyDataManager

step2:
在.h文件中添加如下方法
#import <Foundation/Foundation.h>
typedef enum {
Uname
}DataType;
@interface MyDataManager : NSObject
+(NSArray *)getData:(DataType)type;
@end
tip: 这里用+方法,因为这个方法就像一个工具,我们只需要用就可以,不需要实例化。
这里创建了一个叫DataType的枚举对象,用于后面数据库的查找,因为此例很简单,如果数据库有多张表,就可以在枚举中添加其他元素。
step3:
到.m中实现这个方法
#import "MyDataManager.h"
#import "FMDatabase.h"
#import "ViewModel.h"
@implementation MyDataManager
+(NSArray *)getData:(DataType)type{
static FMDatabase *dataBase;//数据库管理对象
NSMutableArray *array = [[NSMutableArray alloc]init];
//判断dataBase是否为nil
if (dataBase==nil) {
//获取数据库文件路径
NSString *path = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"db"];
//dataBase初始化
dataBase=[[FMDatabase alloc]initWithPath:path];
}
//dataBase有个open方法,返回一个布尔值,判断是否打开成功
if ([dataBase open]) {
NSLog(@"dataBase open success");
}else{
NSLog(@"open failed");
return array;//打开失败操作不再进行
}
//数据库查找,根据type查找不同语句,根据不同的type查询不同的表
switch (type) {
case Uname:
{
//数据库查询语句
NSString *sql = @"select num,name FROM name";
//查询结果的对象
FMResultSet *rs = [dataBase executeQuery:sql];
//FMResultSet对象有一个next方法,返回为1说明后面还有元素,遍历查询结果
while ([rs next]) {
//创建一个数据模型的对象
ViewModel *model = [[ViewModel alloc]init];
//接收,根据不同数据类型用相应类型接收
model.num=[NSString stringWithFormat:@"%d",[rs intForColumn:@"num"]];
//因为此处model里的num为NSString类型,所以要用一个格式化字符串
model.name=[rs stringForColumn:@"name"];
//把结果加到数组中
[array addObject:model];
}
}
break;
default:
break;
}
return array;
}
@end
这里就要添加一个模型对象了~
step4:
添加一个继承与NSObject的ViewModel

我们的数据库有两个值,一个是num一个是name,那么我们在.h文件中就创建两个对象,用于存储从数据库读取到的这两个值:
@property(nonatomic,copy)NSString *num; @property(nonatomic,copy)NSString *name;
从MyDataManager.m中我们不难看出,+(NSArray *)getData:(DataType)type,返回的是一个model组成的数组(其他地方通过调用这个方法,读取这个数组,读取里面的model,取得model里面的东西,就实现了数据库数据的读取,好绕啊。。。)。那么接下来我们就要用这个数组为我们的tableView填充数据。
step5:
刚才说了我们需要调用getData类方法实现数据库的读取,所以在ViewController里别忘了导入MyDataManager的头文件,然后需要把从数据库读取的数据转化为可用的类型,需要用Model,所以,别忘了ViewModel的头文件。

在ViewController.h中我们创建一个数组变量,用来存放getData方法返回的数组:
@property(nonatomic,copy)NSArray *dataArray;
在viewDidLoad里初始化这个数组
_dataArray = [MyDataManager getData:Uname];
看!这里用到了Uname!因为我们这里只有一张表,没体现这个东西。正常情况下我们要用到的数据库不会只有一张表,多张表的话,我们就用这个DataType判断现在需要查看的是哪张表,只要在枚举里加其他元素就OK了,是不是扩展性很好呢~
step6:
把numberOfRowsInSection返回的固定值改成dataArray的对象数量:
return _dataArray.count;
cell的内容也要做相应的更改:
ViewModel *model = _dataArray[indexPath.row];
cell.textLabel.text = model.num;
return cell;
没忘吧,getData返回的是一个由model组成的数组,所以这里_dataArray也是一个由model组成的数组。这里实例化了一个model,让cell里面的textLabel通过这个model取得需要的值~
step7:
测试一下吧~

step8:
都运行成功了,哪来的step8!

浙公网安备 33010602011771号