iOS FMDB使用详解

简述

一个针对IOS的SQlite API封装的第三方库FMDB,FMDB对SDK中的API做了一层封装,使之使用OC来访问,使用方便而且更熟悉。pod FMDB

@FMDB主要涉及两个类,FMDatabase和FMResultSet 下载完FMDB源码后把文件拖到工程中

具体使用

赋上一系列基本操作,增删改查


#import "ZJIHomeDataBaseHandle.h"

@implementation ZJIHomeDataBaseHandle

static ZJIHomeDataBaseHandle *homeDataBaseHandle = nil;

+(ZJIHomeDataBaseHandle *)shareInstance{
    @synchronized(self){
        if(!homeDataBaseHandle) {
            homeDataBaseHandle = [[ZJIHomeDataBaseHandle alloc]init];
            [homeDataBaseHandle openDataBase];
            [homeDataBaseHandle createTable];
        }
    }
    return homeDataBaseHandle;
}

#pragma mark - 定义一个 FMDatabase 对象
static FMDatabase * database = nil;

#pragma mark - 获得沙盒文件下Documents路径
- (NSString *)getDocumentsPath{
    
    NSString * documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    
    return documents;
}

#pragma mark - 打开数据库操作------ databaseWithPath   open
- (void)openDataBase{
    
    if (database) {
        return;
    }
    
    NSString * dataBasePath = [[self getDocumentsPath] stringByAppendingPathComponent:@"latestNews.sqlite"];
    NSLog(@"%@----dataBasePath----",dataBasePath);
    database = [FMDatabase databaseWithPath:dataBasePath];
    if (![database open]) {
        
        NSLog(@"打开数据库失败");
    }
    
    // 为数据库设置缓存,提高查询效率
    database.shouldCacheStatements = YES;
    
    NSLog(@"打开数据库成功");
}

#pragma mark - 关闭数据库操作
- (void)closeDataBase{
    
    if (![database close]) {
        NSLog(@"关闭数据库失败");
        return;
    }
    
    database = nil;
    NSLog(@"关闭数据库成功");
    
}

#pragma mark - 管理创建表的操作
- (void)createTable{
    [self openDataBase];
    if(![database tableExists:@"t_latestNews"]){
       [database executeUpdate:@"CREATE TABLE 't_latestNews' ('id' INTEGER PRIMARY KEY AUTOINCREMENT,'homeLatestNews' text)"];
        NSLog(@"创建表成功");
    }
    
    [self closeDataBase];
}

-(NSString*)dictionaryToJson:(NSDictionary *)dic{
    NSError *parseError = nil;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
    return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}


#pragma mark - 增加数据操作----- executeUpdate
- (void)insertIntoDataBase:(NSDictionary *)homeDictionary{
    
    NSString *homeJSON = [self dictionaryToJson:homeDictionary];
    [self openDataBase];
                                                                       [database executeUpdate:@" DELETE FROM 't_latestNews'"];
    
    [database executeUpdate:@" INSERT INTO 't_latestNews' (homeLatestNews) VALUES (?)",homeJSON];
    
    [self closeDataBase];
}

#pragma mark - 删除数据操作----- executeUpdate
- (void)deleteDataFromDataBase:(NSDictionary *)homeDictionary{
    
    [self openDataBase];
    
    [database executeUpdate:@" DELETE FROM 't_latestNews'"];
    
    [self closeDataBase];
}

#pragma mark - 更新数据操作----- executeUpdate
- (void)updateFromDataBase:(NSDictionary *)homeDictionary{
    NSString *homeJSON = [self dictionaryToJson:homeDictionary];
    
    [self openDataBase];
    
    [database executeUpdate:@" UPDATE 't_latestNews' (homeLatestNews) VALUES (?)",homeJSON];
    
    [self closeDataBase];
}

#pragma mark - 查询数据操作(与其他的都不一样,查询是调用executeQuery,切记切记!!!!!!)
- (NSDictionary *)selectAllDataFromDataBase{
    
    [self openDataBase];
    
    FMResultSet * resultSet = [database executeQuery:@" SELECT * FROM 't_latestNews'"];
    NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];
    while ([resultSet next]) {
        NSString *jsonString = [resultSet stringForColumn:@"homeLatestNews"];
        dic = [self dictionaryWithJsonString:jsonString];
    }
    NSLog(@"%@---dictionaryWithJsonString--", dic);
    [self closeDataBase];
    return dic;
}
-(NSMutableDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
    if (jsonString == nil) {
        return nil;
    }
    
    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSError *err;
    NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
                                                               options:NSJSONReadingMutableContainers
                                                                 error:&err];
    if(err) {
        NSLog(@"json解析失败:%@",err);
        return nil;
    }
    return dic;
}

@end

查看.sqlite文件
先打印文件路径,然后在文件夹中查找到此文件(直接用缩写的文件名xxxx.sqlite是找不到的哦),然后在桌面新建文件夹将sqlite文件复制进去(千万不要拖进去,会在下次运行时重建一个)
最重要下载Datum软件,可即时查看文件缓存的数据

在这里插入图片描述

注意:
准确写SQL命令 ,名称一定需对上

@SQL常用命令使用方法:

(1) 数据记录筛选:

sql=“select * from 数据表 where 字段名=字段值 order by 字段名 [desc]”

sql=“select * from 数据表 where 字段名 like %字段值% order by 字段名 [desc]”

sql=“select top 10 * from 数据表 where 字段名 order by 字段名 [desc]”

sql=“select * from 数据表 where 字段名 in (值1,值2,值3)”

sql=“select * from 数据表 where 字段名 between 值1 and 值2”

(2) 更新数据记录:

sql=“update 数据表 set 字段名=字段值 where 条件表达式”

sql=“update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式”

(3) 删除数据记录:

sql=“delete from 数据表 where 条件表达式”

sql=“delete from 数据表” (将数据表所有记录删除)

(4) 添加数据记录:

sql=“insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)”

sql=“insert into 目标数据表 select * from 源数据表” (把源数据表的记录添加到目标数据表)

(5) 数据记录统计函数:

AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加

引用以上函数的方法:

sql=“select sum(字段名) as 别名 from 数据表 where 条件表达式”
set rs=conn.excute(sql)

用 rs(“别名”) 获取统的计值,其它函数运用同上。

(6) 数据表的建立和删除:

CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )

例:CREATE TABLE tab01(name varchar(50),datetime default now())

DROP TABLE 数据表名称 (永久性删除一个数据表)

@sqlite中用LIMIT返回前2行,语句如下:
select * from aa order by ids desc LIMIT 2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值