iOS sqlite大数据分段加载的实现,sqlite数据库的操作
数据库管理类(自己封装的,挺简单的)
//
// MyDataBaseManger.m
// DB_Test
//
// Created by admin on 17/2/7.
// Copyright © 2017年 HWWY. All rights reserved.
//
#import "MyDataBaseManger.h"
#import "FMDB.h"
@interface MyDataBaseManger()
@property(nonatomic,strong)FMDatabase *dataBase;
@end
@implementation MyDataBaseManger
@synthesize dataBase;
static MyDataBaseManger *manager = nil;
+(MyDataBaseManger *)createManager
{
if (manager == nil) {
manager = [[MyDataBaseManger alloc] init];
}
return manager;
}
-(void)dataBaseWithFile:(NSString *)fileName
{
if(fileName == nil){
NSLog(@"文件名不能为空");
return;
}
NSString *path = [[NSBundle mainBundle]pathForResource:fileName ofType:nil];
if (path == nil) {
NSLog(@"找不到文件路劲");
return;
}
if (path) {
dataBase = [[FMDatabase alloc]initWithPath:path];
if (![dataBase open]) {
NSLog(@"数据库打开失败");
return;
}
}else{
NSLog(@"数据库路径获取失败");
}
}
-(NSArray *)getArrayData:(NSString *)sqlString
{
//每次对数据操作的时候都必须打开数据库,这个东西说不定啥时候就关闭了
[self openDataBase];
NSMutableArray *array = [NSMutableArray array];
FMResultSet *result = [dataBase executeQuery:sqlString];
while (result.next) {
NSDictionary *tempDict = [result resultDictionary];
[array addObject:tempDict];
}
return array;
}
/**
数据库打开类
*/
-(void)openDataBase
{
if ([dataBase close]) {
[dataBase open];
}
}
@end
调用的地方:
//下面是一个简单的例子
//开始值得位置
int startTag = 0;
//每次的增量
static int temp = 30;
NSString *deaseName = @"%%病%%";
//拼接sql语句
NSString *sqlGetAll = [NSString stringWithFormat:@"select * from student where term_name like '%@' limit %d, %d;",deaseName, startTag,temp];
//初始化我们的数据库管理对象
dataBaseManager = [MyDataBaseManger createManager];
[dataBaseManager dataBaseWithFile:@"testDB.db"];
NSArray *arr = [dataBaseManager getArrayData:sqlGetAll];
NSLog(@"%@",arr);
下面只需要对arr里面的字典封装为model就可以使用了,上面我写的startTag和temp封装到下拉控件就可以了,是不是很简单哦。
这样封装的好处,sql语句随心写,返回数据随便解析。