sqlite单例封装

本文详细介绍了如何在iOS开发中进行SQLite数据库的单例封装,包括创建数据库、设计数据库模型、实现单例模式以及相关操作方法,确保在整个应用中数据库的统一管理和高效访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#import <Foundation/Foundation.h>
#import "HXStockModel.h"

@interface DataBaseSimple : NSObject

+(id)sharedInstance;
- (BOOL)insertIntoDB:(HXStockModel *)model;
- (BOOL)deleteFromDBWithKey:(int)key;
- (BOOL)updateFromDBWithKey:(int)key andModel:(HXStockModel *)model;
- (HXStockModel *)selectFromDBWithKey:(int)key;
- (NSArray *)selectFromDB;
- (BOOL)cleanDB;

@end


.m文件

#import "DataBaseSimple.h"
#import "FMDatabaseQueue.h"
#import "FMDatabase.h"

@implementation DataBaseSimple
{
    FMDatabaseQueue * _dataBaseQueue;
}

+(id)sharedInstance
{
    static id _s;
    //多线程对self加锁,oc关键词   单例写法
    @synchronized(self){
        if (_s==nil) {
            _s = [[[self class]alloc]init];
        }
    }
    return _s;
}

- (instancetype)init
{
    self = [super init];
    if (self) {
        // 创建 打开数据库 创建表
        NSArray * arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString * path = [arr objectAtIndex:0];
        path = [path stringByAppendingPathComponent:@"Stock.db"];
        NSLog(@"path is %@...",path);
        _dataBaseQueue = [FMDatabaseQueue databaseQueueWithPath:path];
        [_dataBaseQueue inDatabase:^(FMDatabase *db) {
            if (![db open]) {
                NSLog(@"can not open dataBase!");
                return;
            }
            [db executeUpdate:@"CREATE TABLE if not exists StockInfo (ID integer PRIMARY KEY AUTOINCREMENT,stockName text,StockCode text,stockURLCode text)"];
        }];
    }
    return self;
}

- (BOOL)insertIntoDB:(HXStockModel *)model
{
    [_dataBaseQueue inDatabase:^(FMDatabase *db) {
        BOOL flag = [db executeUpdate:@"insert into StockInfo (stockName,StockCode,stockURLCode) values (?,?,?)",model.stockName,model.StockCode,model.stockURLCode];
        if (flag) {
            NSLog(@"插入成功");
        }else{
            NSLog(@"插入失败");
        }
    }];
    return YES;
}

- (BOOL)deleteFromDBWithKey:(int)key
{
    [_dataBaseQueue inDatabase:^(FMDatabase *db) {
        BOOL flag = [db executeUpdate:@"delete from StockInfo where ID=?",[NSNumber numberWithInt:key]];
        if (flag) {
            NSLog(@"删除成功");
        }else{
            NSLog(@"删除失败");
        }
    }];
    return YES;
}

- (BOOL)updateFromDBWithKey:(int)key andModel:(HXStockModel *)model
{
    [_dataBaseQueue inDatabase:^(FMDatabase *db) {
        BOOL flag = [db executeUpdate:@"update StockInfo set stockName=?,StockCode=?,stockURLCode=? where ID=?",model.stockName,model.StockCode,model.stockURLCode,[NSNumber numberWithInt:key]];
        if (flag) {
            NSLog(@"修改成功");
        }else{
            NSLog(@"修改失败");
        }
    }];
    return YES;
}

- (HXStockModel *)selectFromDBWithKey:(int)key
{
    __block HXStockModel * model = [[HXStockModel alloc] init];
    [_dataBaseQueue inDatabase:^(FMDatabase *db) {
        FMResultSet * rs = [db executeQuery:@"select * from StockInfo where ID=?",[NSNumber numberWithInt:key]];
        while ([rs next]) {
            model.ID = key;
            model.stockName = [rs stringForColumn:@"stockName"];
            model.StockCode = [rs stringForColumn:@"StockCode"];
            model.stockURLCode = [rs stringForColumn:@"stockURLCode"];
        }
    }];
    
    return model;
}

- (NSArray *)selectFromDB
{
    __block NSMutableArray * arr = [NSMutableArray array];
    [_dataBaseQueue inDatabase:^(FMDatabase *db) {
        FMResultSet * rs = [db executeQuery:@"select * from StockInfo"];
        while ([rs next]) {
            HXStockModel * model = [[HXStockModel alloc] init];
            model.ID = [rs intForColumn:@"ID"];
            model.stockName = [rs stringForColumn:@"stockName"];
            model.StockCode = [rs stringForColumn:@"StockCode"];
            model.stockURLCode = [rs stringForColumn:@"stockURLCode"];
            [arr addObject:model];
        }
    }];
    return [arr copy];
}

- (BOOL)cleanDB
{
    [_dataBaseQueue inDatabase:^(FMDatabase *db) {
        BOOL flag = [db executeUpdate:@"delete from StockInfo"];
        if (flag) {
            NSLog(@"清空");
        }else{
            NSLog(@"清空失败");
        }
    }];
    return YES;
}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值