一:创建DBManager .h
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface DBManager : NSObject
+(DBManager *)sharedInstance;
-(void)saveFristReposted:(NSArray *)reposted;
-(NSArray *)allReposted;
-(BOOL)deleteReposted:(NSString *)feedId;
-(BOOL)getdownStatus:(NSString *)feedId;
-(void)setLocalIdentifier:(NSString *)localIdentifier FeedId:(NSString *)feedId;
@end
二:DBManager .m
#import "DBManager.h"
#import <FMDatabase.h>
static FMDatabase *db;
@implementation DBManager
+(DBManager *)sharedInstance{
static DBManager *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (instance == nil) {
instance = [[DBManager alloc] init];
}
});
return instance;
}
-(instancetype)init{
if (self = [super init]) {
[self creatDB];
}
return self;
}
-(void)creatDB{//先
NSString *documentDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString *dataBasePath = [documentDirPath stringByAppendingPathComponent:@"fans.db"];
db = [FMDatabase databaseWithPath:dataBasePath];
if ([db open]) {
NSString *createdDbSql = @"CREATE TABLE IF NOT EXISTS t_reposted (pk integer,username text, profile_pic_url text, des text,is_private integer default 0,feedId text, parentID text,shortcode text,takenTime integer,likerCount integer default 0,mediaType integer default 0,commentCount integer default 0,viewcount integer default 0,mediaUrl text,thumbUrl text, videoPicture text, saveUrl text,width integer,height integer,likeOrNot integer default 0,savedOrNot integer default 0,content text,isRepost integer default 0, downStatus integer default 0, isActive integer default 0,dataTime integer,owner integer,localIdentifier text);"
@"CREATE TABLE IF NOT EXISTS t_feed(pk text PRIMARY KEY NOT NULL, media_type integer, like_count integer, comment_count integer, view_count integer, thumbUrl text, mediaUrl text, exist integer,owner text)";
BOOL result = [db executeStatements:createdDbSql];
if (result) {
NSLog(@"%@",@"创建数据库成功");
}
}
}
三:添加表内数据
//插入数据
-(void)saveFristReposted:(NSArray *)reposted{
if ([db open]) {
int _currentIndex = 0;
for(Reposted * repos in reposted){
_currentIndex += 1;
repos.isRepost = 0;
repos.dataTime = 0;
NSString *queryString = [NSString stringWithFormat:@"select * from t_reposted where feedId = ?"];
[db beginTransaction];
BOOL isRollBack = NO;
@try {
FMResultSet *set =[db executeQuery:queryString,repos.feedId];
if([set next]){
NSLog(@"已存在");
}else{
BOOL result = [db executeUpdate:@"INSERT INTO t_reposted values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" withArgumentsInArray:[self arrFromObject:repos]];
if (result) {
NSLog(@"保存成功");
}
}
}
@catch (NSException *exception) {
isRollBack = YES;
[db rollback];
}
@finally {
if (!isRollBack) {
[db commit];
}
}
}
}
}
//模型转数组
- (NSMutableArray *)arrFromObject:(NSObject *)object {
NSMutableArray *array = [NSMutableArray array];
unsigned int count;
objc_property_t *propertyList = class_copyPropertyList([object class], &count);
for (int i = 0; i < count; i++) {
objc_property_t property = propertyList[i];
const char *cName = property_getName(property);
NSString *name = [NSString stringWithUTF8String:cName];
NSObject *value = [object valueForKey:name];//valueForKey返回的数字和字符串都是对象
if ([value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSNumber class]]) {
//string , bool, int ,NSinteger
[array addObject:value];
}else{
[array addObject:[NSNull null]];
}
}
return [array copy];
}
四:获取表内数据
1.获取单个
-(BOOL)getdownStatus:(NSString *)feedId{
bool kp = false;
if ([db open]) {
NSString *queryString = [NSString stringWithFormat:@"select * from t_reposted where feedId = ?"];
[db beginTransaction];
BOOL isRollBack = NO;
@try {
FMResultSet *set =[db executeQuery:queryString,feedId];
if([set next]){
NSLog(@"已存在");
if([set intForColumn:@"downStatus"]==3){
kp = true;
}else{
[self deleteReposted:feedId];
}
}else{
}
}
@catch (NSException *exception) {
isRollBack = YES;
[db rollback];
}
@finally {
if (!isRollBack) {
[db commit];
}
}
}
return kp;
}
2.获取所有
-(NSArray *)allReposted{
NSMutableArray *array = [NSMutableArray array];
NSMutableArray *array2 = [NSMutableArray array];
if ([db open]) {
NSString *queryString = [NSString stringWithFormat:@"select * from t_reposted"];
[db beginTransaction];
BOOL isRollBack = NO;
NSString *kkparentID = @"";
@try {
FMResultSet *set =[db executeQuery:queryString];
if (set) {
while ([set next]) {
Reposted *rep = [Reposted new];
rep.username = [set stringForColumn:@"username"];
rep.profile_pic_url = [set stringForColumn:@"profile_pic_url"];
rep.content = [set stringForColumn:@"content"];
rep.mediaType = [set intForColumn:@"mediaType"];
rep.thumbUrl = [set stringForColumn:@"thumbUrl"];
rep.saveUrl = [set stringForColumn:@"saveUrl"];
rep.downStatus = [set intForColumn:@"downStatus"];
rep.parentID = [set stringForColumn:@"parentID"];
rep.feedId = [set stringForColumn:@"feedId"];
rep.shortcode = [set stringForColumn:@"shortcode"];
rep.localIdentifier = [set stringForColumn:@"localIdentifier"];
if(![kkparentID isEqual:rep.parentID]){
kkparentID = rep.parentID;
if(array2.count==0){
[array2 addObject:rep];
}else{
[array addObject:array2];
array2 = [NSMutableArray array];
[array2 addObject:rep];
}
}else{
[array2 addObject:rep];
}
}
}
}@catch (NSException *exception) {
isRollBack = YES;
[db rollback];
}
@finally {
if (!isRollBack) {
[db commit];
}
}
}
if(array2.count>0){
[array addObject:array2];
}
return array;
}
五:删除表内数据
-(BOOL)deleteReposted:(NSString *)feedId{
BOOL ko = false;
if ([db open]) {
NSString *queryString = [NSString stringWithFormat:@"select * from t_reposted where feedId = ?"];
[db beginTransaction];
BOOL isRollBack = NO;
@try {
FMResultSet *set =[db executeQuery:queryString,feedId];
if([set next]){
NSLog(@"已存在");
BOOL success = [db executeUpdate:@"delete from t_reposted where feedId=?",feedId];
ko = success;
}else{
}
}
@catch (NSException *exception) {
isRollBack = YES;
[db rollback];
}
@finally {
if (!isRollBack) {
[db commit];
}
}
}
return ko;
}
六:修改表内数据
-(void)setLocalIdentifier:(NSString *)localIdentifier FeedId:(NSString *)feedId{
if ([db open]) {
NSString *queryString = [NSString stringWithFormat:@"select * from t_reposted where feedId = ?"];
[db beginTransaction];
BOOL isRollBack = NO;
@try {
FMResultSet *set =[db executeQuery:queryString,feedId];
if([set next]){
NSLog(@"已存在");
[db executeUpdate:@"update t_reposted set localIdentifier = ? where feedId = ?",localIdentifier,feedId];
}else{
}
}
@catch (NSException *exception) {
isRollBack = YES;
[db rollback];
}
@finally {
if (!isRollBack) {
[db commit];
}
}
}
}
网友评论