[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是否为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]数据库的使用--数据读取相关推荐
- C# 异步读取数据库里面的数据与绑定UI的解决办法
异步读取数据库,在数据绑定的时候会出现点问题,就是窗体界面会无法关闭,要结束任务才能结束进程.例如下面代码 首先按习惯的方法,设定线程更新UI a2.CheckForIllegalCrossThrea ...
- SQLite数据库如何存储和读取二进制数据
1. 存储二进制数据 SQLite提供的绑定二进制参数接口函数为: int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n ...
- 时序数据库技术体系 – InfluxDB TSM存储引擎之数据读取
任何一个数据库系统内核关注的重点无非:数据在内存中如何存储.在文件中如何存储.索引结构如何存储.数据写入流程以及数据读取流程.关于InfluxDB存储内核,笔者在之前的文章中已经比较全面的介绍了数据的 ...
- mysql source导入_读取MySQL数据库中的数据【Python数据分析百例连载】
当所需的数据存贮在MySQL数据库中时,那么数据分析首要任务就是要通过Pandas读取MySQL数据.例如,某网站注册用户信息保存在MySQL数据库中,如图所示(部分数据),下面将使用Pandas的r ...
- asp.net中读取数据库中的数据可以使用DataReader和DataSet 2种方式(初学者望大家不要笑我)...
在asp.net中,读取数据库中的数据可以使用DataReader和DataSet 2种方式, 两者的差异如下: 使用Dataset对象读取数据大致需要以下5个步骤: (1)建立数据库 ...
- 多线程读取数据库300万数据,写入到redis
先说一下业务场景. mysql单表300w条的数据,需要读取到rediis中.如果全部采用单线程的话效率过低,无法接受,因此考虑多线程并发处理. 期间踩了好多坑. 小伙伴们应该很好奇效率到底差多少,贴 ...
- 微信小程序怎么取mysql,微信小程序怎么读取数据库?小程序如何读取数据?
微信小程序怎么读取数据库?小程序如何读取数据?各位微信用户们,如果你再开发微信小程序的过程中,需要微信小程序读取数据库的话,就跟着小编往下看微信小程序怎么读取数据库. 微信小程序怎么读取数据库? 微信 ...
- 从0开始弄一个面向OC数据库(三)--数据库升级,数据迁移,删除数据
前言 首先,在上一篇文章从0开始弄一个面向OC数据库(二),讲解了如何向数据库保存或更新一个模型.如何查询数据库里面的数据.其次,本篇要说的内容有: 数据库更新.数据迁移. 删除数据 使用场景: 随着 ...
- 小程序——云开发数据库的数据读取出来显示到页面
最近在做小程序,遇到一个小问题,要将云开发数据库的数据读取出来显示到页面 JS页面: 1.数据库初始化 const db = wx.cloud.database() 2.定义一个变量,将this赋给它 ...
最新文章
- 数据库查询构建控件集Active Query Builder 控件
- Machine Learning week 5 quiz: programming assignment-Multi-Neural Network Learning
- 读ACM程序设计竞赛基础教程之-------技巧小结
- oracle删除判断是否存在,oracle创建表之前判断表是否存在,如果存在则删除已有表...
- 并发(concurrency)和并行(parallellism)
- 2021浙江高考宁波四中成绩查询,2021浙江高考成绩查询时间公布 几号能查分
- 终端母体服务器是心识,自我意识的觉醒与重返母体的归属.doc
- jquery 找不到live方法解决
- windows2000/xp运行命令全集
- 2010年被逼出来的10个中国IT产品
- 第二章 ASP.NET MVC (控制器向视图传递值(二))
- hadoop无法停止
- HTTP发包工具 -HTTPie
- 【视频检测】Flow-Guided Feature Aggregation for Video Object Detection
- hosts – 如何默认使用记事本打开hosts文件或快捷方式
- vue3实现简单轮播图
- 流,对话,会话,连接等一些基本概念
- redis常用命令集合
- 什么是招标控制价?与标底价有什么区别
- 开源mock server系统
热门文章
- java虚拟机相同吗_Java虚拟机是否真的是与VMWare或Parallels文件相同的虚拟机?
- python生成随机数random操作_Python random生成随机数示例
- HTML布局是外边距咋表示,布局 页面设置百分比 子元素如何设置外边距?
- python导入模块介绍_详解Python模块导入方法
- python模块_python模块
- h5自定义相机界面_有没有什么比较好用的H5小程序?
- php mutex,go互斥锁Mutex
- ionic 禁止横屏处理
- 计算机科学与技术做什么实验,计算机科学与技术专业实验教学大纲
- linux进程被杀掉日志,Linux进程突然被杀掉(OOM killer),查看系统日志