接着上一篇博文,现在我们来实现数据库数据的读取~

首先来理下思路(好吧是我懵逼了-_-|||)

实例化一个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是否为nilif (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!

转载于:https://www.cnblogs.com/ybw123321/p/5404963.html

[OC]数据库的使用--数据读取相关推荐

  1. C# 异步读取数据库里面的数据与绑定UI的解决办法

    异步读取数据库,在数据绑定的时候会出现点问题,就是窗体界面会无法关闭,要结束任务才能结束进程.例如下面代码 首先按习惯的方法,设定线程更新UI a2.CheckForIllegalCrossThrea ...

  2. SQLite数据库如何存储和读取二进制数据

    1.       存储二进制数据 SQLite提供的绑定二进制参数接口函数为: int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n ...

  3. 时序数据库技术体系 – InfluxDB TSM存储引擎之数据读取

    任何一个数据库系统内核关注的重点无非:数据在内存中如何存储.在文件中如何存储.索引结构如何存储.数据写入流程以及数据读取流程.关于InfluxDB存储内核,笔者在之前的文章中已经比较全面的介绍了数据的 ...

  4. mysql source导入_读取MySQL数据库中的数据【Python数据分析百例连载】

    当所需的数据存贮在MySQL数据库中时,那么数据分析首要任务就是要通过Pandas读取MySQL数据.例如,某网站注册用户信息保存在MySQL数据库中,如图所示(部分数据),下面将使用Pandas的r ...

  5. asp.net中读取数据库中的数据可以使用DataReader和DataSet 2种方式(初学者望大家不要笑我)...

    在asp.net中,读取数据库中的数据可以使用DataReader和DataSet 2种方式, 两者的差异如下:     使用Dataset对象读取数据大致需要以下5个步骤:     (1)建立数据库 ...

  6. 多线程读取数据库300万数据,写入到redis

    先说一下业务场景. mysql单表300w条的数据,需要读取到rediis中.如果全部采用单线程的话效率过低,无法接受,因此考虑多线程并发处理. 期间踩了好多坑. 小伙伴们应该很好奇效率到底差多少,贴 ...

  7. 微信小程序怎么取mysql,微信小程序怎么读取数据库?小程序如何读取数据?

    微信小程序怎么读取数据库?小程序如何读取数据?各位微信用户们,如果你再开发微信小程序的过程中,需要微信小程序读取数据库的话,就跟着小编往下看微信小程序怎么读取数据库. 微信小程序怎么读取数据库? 微信 ...

  8. 从0开始弄一个面向OC数据库(三)--数据库升级,数据迁移,删除数据

    前言 首先,在上一篇文章从0开始弄一个面向OC数据库(二),讲解了如何向数据库保存或更新一个模型.如何查询数据库里面的数据.其次,本篇要说的内容有: 数据库更新.数据迁移. 删除数据 使用场景: 随着 ...

  9. 小程序——云开发数据库的数据读取出来显示到页面

    最近在做小程序,遇到一个小问题,要将云开发数据库的数据读取出来显示到页面 JS页面: 1.数据库初始化 const db = wx.cloud.database() 2.定义一个变量,将this赋给它 ...

最新文章

  1. 数据库查询构建控件集Active Query Builder 控件
  2. Machine Learning week 5 quiz: programming assignment-Multi-Neural Network Learning
  3. 读ACM程序设计竞赛基础教程之-------技巧小结
  4. oracle删除判断是否存在,oracle创建表之前判断表是否存在,如果存在则删除已有表...
  5. 并发(concurrency)和并行(parallellism)
  6. 2021浙江高考宁波四中成绩查询,2021浙江高考成绩查询时间公布 几号能查分
  7. 终端母体服务器是心识,自我意识的觉醒与重返母体的归属.doc
  8. jquery 找不到live方法解决
  9. windows2000/xp运行命令全集
  10. 2010年被逼出来的10个中国IT产品
  11. 第二章 ASP.NET MVC (控制器向视图传递值(二))
  12. hadoop无法停止
  13. HTTP发包工具 -HTTPie
  14. 【视频检测】Flow-Guided Feature Aggregation for Video Object Detection
  15. hosts – 如何默认使用记事本打开hosts文件或快捷方式
  16. vue3实现简单轮播图
  17. 流,对话,会话,连接等一些基本概念
  18. redis常用命令集合
  19. 什么是招标控制价?与标底价有什么区别
  20. 开源mock server系统

热门文章

  1. java虚拟机相同吗_Java虚拟机是否真的是与VMWare或Parallels文件相同的虚拟机?
  2. python生成随机数random操作_Python random生成随机数示例
  3. HTML布局是外边距咋表示,布局 页面设置百分比 子元素如何设置外边距?
  4. python导入模块介绍_详解Python模块导入方法
  5. python模块_python模块
  6. h5自定义相机界面_有没有什么比较好用的H5小程序?
  7. php mutex,go互斥锁Mutex
  8. ionic 禁止横屏处理
  9. 计算机科学与技术做什么实验,计算机科学与技术专业实验教学大纲
  10. linux进程被杀掉日志,Linux进程突然被杀掉(OOM killer),查看系统日志