美文网首页
ios - fmdb对象存储

ios - fmdb对象存储

作者: 温柔vs先生 | 来源:发表于2023-05-28 20:29 被阅读0次
//
//  TYDataBase.h
//  wrxs523
//
//  Created by wbb on 2023/5/29.
//

#import <Foundation/Foundation.h>
#import "TYUserInfo.h"
NS_ASSUME_NONNULL_BEGIN

@interface TYDataBase : NSObject
+(instancetype)shareInstance;

//创建照片标准表
-(void)createStandardsDatabase;
//增
-(BOOL)addPhotoModel:(TYUserInfo *)photoModel;
//删
-(void)deletePhotoModel:(TYUserInfo *)photoModel;
- (void)deleteAll;
- (void)deletetable;
//改
-(void)updatePhotoModel:(TYUserInfo *)photoModel;
//查
-(TYUserInfo *)getPhotoModel:(TYUserInfo *)photoModel;
-(TYUserInfo *)getPhotoModelWithEmail:(NSString *)email;
- (UIImage *)queryImageWithId:(NSString *)email;
@end

NS_ASSUME_NONNULL_END

//
//  TYDataBase.m
//  wrxs523
//
//  Created by wbb on 2023/5/29.
//

#import "TYDataBase.h"
#import "FMDB.h"

@interface TYDataBase ()

@property(nonatomic, strong) NSString *dataBasePath;
@property(nonatomic, strong) FMDatabase *standardDatabase;
@end

@implementation TYDataBase
+(instancetype)shareInstance
{
    static dispatch_once_t onceToken;
    static TYDataBase * standardDatabase = nil;
    dispatch_once(&onceToken, ^{
    
        standardDatabase = [[TYDataBase alloc]init];
    
        [standardDatabase createStandardsDatabase];
    
    });

    return standardDatabase;

}

//数据库地址
-(NSString *)dataBasePath{

    if (_dataBasePath == nil) {
    
        NSString *pathes = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
//        NSString * pathes = @"/Users/gonganxinxi/Desktop";

        _dataBasePath = [pathes stringByAppendingPathComponent:@"my.sqlite"];
    
    }

    return _dataBasePath;

}

//创建照片标准表
-(void)createStandardsDatabase
{
    self.standardDatabase = [FMDatabase databaseWithPath:self.dataBasePath];

    if ([self.standardDatabase open]) {
    
        NSLog(@"数据库打开成功");
    
        NSString *sqString = @"create table if not exists standard (s_id integer primary key autoincrement not NULL, s_clcsEmail text,s_clcsPassword text,s_clcsNickname text,s_clcsGender text,s_clcsAge text, s_clcsData blob,s_clcxUserInfo blob)";
    
    
        BOOL result = [self.standardDatabase executeUpdate:sqString];
    
        if (result) {
        
            NSLog(@"创建表成功");
        
        }else{
            NSLog(@"创建表失败");
        
        }
    
    }

}

//增
-(BOOL)addPhotoModel:(TYUserInfo *)photoModel
{

//    TYUserInfo * model = photoModel;

//    NSLog(@"数据库%ld, %@, %@, %@, %@, %@, %@", (long)model.ID, model.CSM, model.CSZ, model.CSSM, model.ZPLX,model.DQDM,model.SFYX);
    if ([self isExistDataWithContent:photoModel.email]) {
        [self updatePhotoModel:photoModel];
        return NO;
    }
    
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:photoModel];

    BOOL result = [self.standardDatabase executeUpdateWithFormat:@"insert into standard (s_clcsEmail, s_clcsPassword, s_clcsNickname, s_clcsGender , s_clcsAge,s_clcsData, s_clcxUserInfo) values (%@, %@, %@, %@, %@,%@, %@)", photoModel.email, photoModel.password, photoModel.nickname, photoModel.gender, photoModel.age,photoModel.imageData,data];


    if (result) {
        NSLog(@"插入数据成功");
    }else{
        NSLog(@"插入数据失败");
    
    }
    return result;
}
//删

-(void)deletePhotoModel:(TYUserInfo *)photoModel
{
    TYUserInfo * model = photoModel;

    BOOL result = [self.standardDatabase executeUpdateWithFormat:@"delete from standard where s_clcsEmail = %@ and s_clcsPassword = %@ ",  photoModel.email,photoModel.password];

    if (result) {
        NSLog(@"删除数据成功");
    }else{
        NSLog(@"删除数据失败");
    }
}

- (void)deleteAll
{
    BOOL result = [self.standardDatabase executeUpdateWithFormat:@"delete from standard"];

    if (result) {
        NSLog(@"删除全部数据成功");
    }else{
        NSLog(@"删除全部数据失败");
    }
}

- (void)deletetable
{
    BOOL result = [self.standardDatabase executeUpdateWithFormat:@"drop table if exists standard"];
    
    if (result) {
        NSLog(@"删除表成功");
    }else{
        NSLog(@"删除表失败");
    }
}

//改
-(void)updatePhotoModel:(TYUserInfo *)photoModel
{
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:photoModel];

    BOOL result = [self.standardDatabase executeUpdateWithFormat:@"update standard set s_clcsEmail = %@,s_clcsPassword = %@, s_clcsNickname  = %@,s_clcsGender  = %@,s_clcsAge  = %@,s_clcsData  = %@,s_clcxUserInfo = %@ where s_clcsEmail = %@", photoModel.email, photoModel.password, photoModel.nickname, photoModel.gender, photoModel.age,photoModel.imageData,data,photoModel.email];
     
    if (result) {
        NSLog(@"更改数据成功");
    }else{
        NSLog(@"更改数据失败");
    }

}

//查 : 根据需要,查到响应的model返回,我们可以从中获取model的属性值
-(TYUserInfo *)getPhotoModel:(TYUserInfo *)photoModel
{
    TYUserInfo * returnModel = nil;

    FMResultSet *result = [self.standardDatabase executeQueryWithFormat:@"select s_clcxUserInfo from standard where s_clcsEmail = %@ ", photoModel.email];

    while ([result next]) {
    
        NSData *data = [result dataForColumn:@"s_clcxUserInfo"];
    
        returnModel = [NSKeyedUnarchiver unarchiveObjectWithData:data];
           
    }
    
    return returnModel;
}
-(TYUserInfo *)getPhotoModelWithEmail:(NSString *)email
{
    TYUserInfo * returnModel = nil;

    FMResultSet *result = [self.standardDatabase executeQueryWithFormat:@"select s_clcxUserInfo from standard where s_clcsEmail = %@ ", email];

    while ([result next]) {
    
        NSData *data = [result dataForColumn:@"s_clcxUserInfo"];
    
        returnModel = [NSKeyedUnarchiver unarchiveObjectWithData:data];
           
    }
    
    return returnModel;
}
    // 判断数据库中是否已经存在该数据
- (BOOL)isExistDataWithContent:(NSString *)email {
    FMResultSet *set = [self.standardDatabase executeQuery:@"SELECT * FROM standard WHERE s_clcsEmail = ?",email];
    return [set next];
}

// 存储图片
- (BOOL)insertImage:(UIImage *)image withEmail:(NSString *)email {
    NSData *imageData = UIImagePNGRepresentation(image);
    BOOL success = [self.standardDatabase executeUpdate:@"INSERT INTO standard (s_clcsData) VALUES (?) where s_clcsEmail = ?", imageData,email];
    return success;
}

// 查询图片
- (UIImage *)queryImageWithId:(NSString *)email {
    FMResultSet *resultSet = [self.standardDatabase executeQuery:@"SELECT * FROM standard WHERE s_clcsEmail = ?", email];
    UIImage *image = nil;
    if ([resultSet next]) {
        NSData *imageData = [resultSet dataForColumn:@"s_clcsData"];
        image = [UIImage imageWithData:imageData];
    }
    return image;
}
@end

//
//  TYUserInfo.h
//  wrxs523
//
//  Created by wbb on 2023/5/25.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface TYUserInfo : NSObject


@property (nonatomic, copy) NSString * email;
@property (nonatomic, copy) NSString * password;
@property (nonatomic, copy) NSString * nickname;
@property (nonatomic, copy) NSString * gender;
@property (nonatomic, copy) NSString * age;
@property (nonatomic, strong) NSData * imageData;
@end

NS_ASSUME_NONNULL_END

#import "TYUserInfo.h"
#import "MJExtension.h"
@implementation TYUserInfo
//一句话将所有的子文件全部归档反归档(MJExtension)
MJCodingImplementation
@end

相关文章

  • iOS Swift 本地存储相关

    FMDB数据库存储 一、简单介绍 什么是FMDBFMDB 是 iOS 平台的 SQLite 数据库框架。FMDB ...

  • [iOS]数据库第三方框架FMDB详细讲解

    [iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,...

  • iOS_FMDB

    FMDB:FMDB是iOS平台的SQLite数据库框架 FMDB的优势:使用起来更加面向对象,省去了很多麻烦、冗余...

  • iOS本地存储-数据库(FMDB)

    原文:# iOS本地存储-数据库(FMDB) iOS中原声的SQLite API在进行数据存储的时候,需要使用C语...

  • 【iOS开发】数据存储——SQLite3框架FMDB的使用

    【iOS开发】数据存储——SQLite3框架FMDB的使用 在学习FMDB框架之前,我们首先来大概了解下SQL(S...

  • 论一位iOS工程师应该怎样优雅的使用FMDB

    首先是特别多的参考文章 FMDB对图片的存储、查询、删除 FMDB 使用方法 [iOS]数据库第三方框架FMDB详...

  • iOS数据存储-FMDB

    FMDB是建立在SQLite之上的,以OC的语法封装了SQLite的C语言API,使用起来更加面向对象。可以存储数...

  • iOS - FMDB存储数组

    1.创建数据库 2.建表 不同类型的判空 对数据库中存储的每一个值都有一个类型NULL 这个值为空值INTEGER...

  • Swift-CoreData简介

    iOS数据存储除了SQLite,FMDB,归档之外,项目中涉及最多的就是CoreData.CoreData底层数据...

  • iOS FMDB

    iOS FMDB 数据库创建、增、删、改、查。 创建对象 创建表 integer,text:类型 primary ...

网友评论

      本文标题:ios - fmdb对象存储

      本文链接:https://www.haomeiwen.com/subject/qybdedtx.html