#import "SQLdataManger.h"

#import "FMDatabaseAdditions.h"

static SQLdataManger * instance=nil;

#define SQLfileName @"__MACOSX"

@interfaceSQLdataManger(){

NSString *sqlDataPath;

}

@end

@implementation SQLdataManger

+(SQLdataManger*)getInstance

{

if( instance == nil ){

//        static dispatch_once_t onceToken;

@synchronized(self) {

instance =  [[SQLdataManger alloc] init];

[instance createTable];

NSLog(@"-------------------------startInit");

}

//        });

}

returninstance;

}

+ (void)clearInstance{

if (instance) {

instance = nil;

}

}

//将对象转换成json字符串

- (NSString *)changeObjectToJsonString : (id)objec{

NSData *tempData = [NSJSONSerialization dataWithJSONObject:objec options:0 error:nil];

NSString *jsonString = [[NSStringalloc]initWithData:tempData encoding:NSUTF8StringEncoding];

//    NSLog(@"jsonString is %@" ,jsonString);

return jsonString ;

}

- (void)createTable {

NSFileManager * fileManager = [NSFileManagerdefaultManager];

NSArray *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

NSString *paths = [[path objectAtIndex:0] stringByAppendingPathComponent:SQLfileName];

sqlDataPath = paths;

if ([fileManager fileExistsAtPath:paths] == NO) {

// create it

FMDatabase * db = [FMDatabase databaseWithPath:paths];

if ([db open]) {

//建立第一张表:用于获取新闻是否读取状态

NSString * sql = @"CREATE TABLE 'ReadStateTable' (id text identity primary key , 'isRead' VARCHAR)";

BOOL res = [db executeUpdate:sql];

if (!res) {

NSLog(@"error when creating db table");

} else {

NSLog(@"succ to creating db table");

}

//建立第二张表,用于存储视频是否读取状态

sql = @"CREATE TABLE 'VideoReadStateTable' (id text identity primary key , 'isRead' VARCHAR)";

res = [db executeUpdate:sql];

if (!res) {

NSLog(@"error when creating db table");

} else {

NSLog(@"succ to creating db table");

}

//建立第三张表,用于存储联系人

sql = @"CREATE TABLE 'PersonListTable' (id text identity primary key , 'email' VARCHAR , 'headPic' VARCHAR ,'job' VARCHAR ,'name' VARCHAR ,'phone' VARCHAR ,'remark' VARCHAR )";

res = [db executeUpdate:sql];

if (!res) {

NSLog(@"error when creating db table");

} else {

NSLog(@"succ to creating db table");

}

[db close];

} else {

NSLog(@"error when open db");

}

}

}

- (NSString *)checkNULLstring:(NSString *)oriString{

NSString *string = @"";

if( !oriString ) return string;

if( [oriString isKindOfClass:[NSNull class] ] ) return string ;

string =[NSString stringWithFormat:@"%@" , oriString ];

return string ;

}

#pragma mark PersonList

- (BOOL)insertPersonListDataWithData:(NSArray *)transArray{

FMDatabase * db = [FMDatabasedatabaseWithPath:sqlDataPath];

BOOL res = NO ;

int nums = [transArray count];

if ([db open]) {

[db beginTransaction];

BOOL isRollBack = NO;

@try {

NSString * sql = @"insert into PersonListTable (id,email,headPic,job,name,phone,remark) values(?,?,?,?,?,?,?)" ;

for( int i =0 ;i<nums ;i++ ){

NSDictionary *dic = [transArray objectAtIndex:i];

NSString *idString = [self checkNULLstring:[dic objectForKey:@"id"]];

NSString *email = [self checkNULLstring:[dic objectForKey:@"email"]];

NSString *headPic = [self checkNULLstring:[dic objectForKey:@"headPic"]];

NSString *job = [self checkNULLstring:[dic objectForKey:@"job"]];

NSString *name = [self checkNULLstring:[dic objectForKey:@"name"]];

NSString *phone = [self checkNULLstring:[dic objectForKey:@"phone"]];

NSString *remark = [self checkNULLstring:[dic objectForKey:@"remark"]];

res = [db executeUpdate:sql,idString,email,headPic,job,name,phone,remark];

}

}

@catch (NSException *exception) {

[db rollback];

}

@finally {

if (!isRollBack) {

res = YES ;

[db commit];

}

}

[db close];

}

returnYES;

}

- (NSArray *)queryPersonListWithSql:(NSString *)querySQL{

NSMutableArray *mutableArray = [[NSMutableArray alloc]init] ;

FMDatabase * db = [FMDatabasedatabaseWithPath:sqlDataPath];

NSString *sql = [NSStringstringWithFormat:@"select * from PersonListTable"];

if( querySQL && ![querySQL isEqualToString:@""] ){

sql = [NSStringstringWithFormat:@"%@ where name like '%%%@%%' or job like '%%%@%%'" ,sql , querySQL , querySQL ];

}

if ([db open]) {

FMResultSet * rs = [db executeQuery:sql];

while ([rs next]) {

NSDictionary *dic = [rs resultDictionary] ;

[mutableArray addObject:dic];

}

[db close];

}

return mutableArray ;

}

#pragma mark NewsTable

- (BOOL)queryIsReadOfReadStateTable:(NSString *)idString{

FMDatabase * db = [FMDatabasedatabaseWithPath:sqlDataPath];

BOOL isExit = NO ;

if ([db open]) {

NSString * sql = [NSStringstringWithFormat:@"select * from ReadStateTable where id = '%@' " , idString ];

//        NSLog(@"sql is %@" , sql);

FMResultSet * rs = [db executeQuery:sql];

while ([rs next]) {

NSDictionary *dic = [rs resultDictionary] ;

isExit = [[dic objectForKey:@"isRead"] boolValue] ;

break;

}

[db close];

}

return isExit ;

}

- (BOOL)insertReadStateTableData:(NSArray *)transArray{

//    return NO;

FMDatabase * db = [FMDatabasedatabaseWithPath:sqlDataPath];

BOOL res = NO ;

int nums = [transArray count];

if ([db open]) {

NSString * sql = @"insert into ReadStateTable (id,isRead) (SELECT '%@','%@' FROM ReadStateTable u2  JOIN( SELECT COUNT(*) num FROM ReadStateTable u1 WHERE u1.id = '%@') u3 ON u3.num < 1  LIMIT 1)" ;

for( int i =0 ;i<nums ;i++ ){

NSDictionary *dic = [transArray objectAtIndex:i];

NSString *idString = [self checkNULLstring:[dic objectForKey:@"id"]];

NSString *isRead = [NSString stringWithFormat:@"%@",[NSNumber numberWithBool:NO]];

sql = [NSString stringWithFormat:sql,idString,isRead,idString];

res = [db executeUpdate:sql];

}

//        [db beginTransaction];

//        BOOL isRollBack = NO;

//        @try {

//            //CREATE TABLE 'ReadStateTable' (id text identity primary key , 'isRead' VARCHAR)

//            NSString * sql = @"insert into ReadStateTable (id,isRead) values(?,?)" ;

//            for( int i =0 ;i<nums ;i++ ){

//                NSDictionary *dic = [transArray objectAtIndex:i];

//                NSString *idString = [self checkNULLstring:[dic objectForKey:@"id"]];

//                NSString *isRead = [NSString stringWithFormat:@"%@",[NSNumber numberWithBool:NO]];

//

//                res = [db executeUpdate:sql,idString,isRead];

//            }

//        }

//        @catch (NSException *exception) {

//            [db rollback];

//        }

//        @finally {

//            if (!isRollBack) {

//                res = YES ;

//                [db commit];

//            }

//        }

[db close];

}

returnYES;

}

- (BOOL)inserAlreadyReadStateWithIdString:(NSString *)idString{

FMDatabase * db = [FMDatabasedatabaseWithPath:sqlDataPath];

BOOL res = NO ;

if ([db open]) {

NSString * sql = @"insert or replace into ReadStateTable (id,isRead) values(?,?)" ;

NSString *isRead = [NSStringstringWithFormat:@"%@",[NSNumbernumberWithBool:YES]];

res = [db executeUpdate:sql,idString,isRead];

[db close];

}

return res ;

}

#pragma mark Video Read

- (BOOL)videoQueryIsReadOfReadStateTable:(NSString *)idString{

FMDatabase * db = [FMDatabasedatabaseWithPath:sqlDataPath];

BOOL isExit = NO ;

if ([db open]) {

NSString * sql = [NSStringstringWithFormat:@"select * from VideoReadStateTable where id = '%@' " , idString ];

//        NSLog(@"sql is %@" , sql);

FMResultSet * rs = [db executeQuery:sql];

while ([rs next]) {

NSDictionary *dic = [rs resultDictionary] ;

isExit = [[dic objectForKey:@"isRead"] boolValue] ;

break;

}

[db close];

}

return isExit ;

}

- (BOOL)videoInsertReadStateTableData:(NSArray *)transArray{

FMDatabase * db = [FMDatabasedatabaseWithPath:sqlDataPath];

BOOL res = NO ;

int nums = [transArray count];

if ([db open]) {

NSString * sql = @"insert into VideoReadStateTable (id,isRead) (SELECT '%@','%@' FROM VideoReadStateTable u2  JOIN( SELECT COUNT(*) num FROM VideoReadStateTable u1 WHERE u1.id = '%@') u3 ON u3.num < 1  LIMIT 1)" ;

for( int i =0 ;i<nums ;i++ ){

NSDictionary *dic = [transArray objectAtIndex:i];

NSString *idString = [self checkNULLstring:[dic objectForKey:@"id"]];

NSString *isRead = [NSString stringWithFormat:@"%@",[NSNumber numberWithBool:NO]];

sql = [NSString stringWithFormat:sql,idString,isRead,idString];

res = [db executeUpdate:sql];

}

//        [db beginTransaction];

//        BOOL isRollBack = NO;

//        @try {

//            //CREATE TABLE 'ReadStateTable' (id text identity primary key , 'isRead' VARCHAR)

//            NSString * sql = @"insert into VideoReadStateTable (id,isRead) values(?,?)" ;

//            for( int i =0 ;i<nums ;i++ ){

//                NSDictionary *dic = [transArray objectAtIndex:i];

//                NSString *idString = [self checkNULLstring:[dic objectForKey:@"id"]];

//                NSString *isRead = [NSString stringWithFormat:@"%@",[NSNumber numberWithBool:NO]];

//

//                res = [db executeUpdate:sql,idString,isRead];

//            }

//        }

//        @catch (NSException *exception) {

//            [db rollback];

//        }

//        @finally {

//            if (!isRollBack) {

//                res = YES ;

//                [db commit];

//            }

//        }

[db close];

}

returnYES;

}

- (BOOL)videoInserAlreadyReadStateWithIdString:(NSString *)idString{

FMDatabase * db = [FMDatabasedatabaseWithPath:sqlDataPath];

BOOL res = NO ;

if ([db open]) {

NSString * sql = @"insert or replace into VideoReadStateTable (id,isRead) values(?,?)" ;

NSString *isRead = [NSStringstringWithFormat:@"%@",[NSNumbernumberWithBool:YES]];

res = [db executeUpdate:sql,idString,isRead];

[db close];

}

return res ;

}

数据库使用fmdb的更多相关文章

  1. iOS开发数据库篇—FMDB简单介绍

    iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...

  2. iOS开发数据库篇—FMDB数据库队列

    iOS开发数据库篇—FMDB数据库队列 一.代码示例 1.需要先导入FMDB框架和头文件,由于该框架依赖于libsqlite库,所以还应该导入该库. 2.代码如下: // // YYViewContr ...

  3. SQLite数据库框架--FMDB简单介绍

    1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码 对比 ...

  4. iOS 数据库第三方FMDB的简单使用

    一 FMDB的简单说明及介绍 FMDB的github地址 https://github.com/ccgus/fmdb FMDB是一款简洁的,易用的封装库,简单介绍一下FMDB的使用 在FMDB下载文件 ...

  5. iOS:第三方数据库文件FMDB的使用

    第三方数据库FMDB •FMDB的使用:在sqlite的基础上,将sqlite中的函数进行封装产生的一个数据库文件. –FMDB的好处是对基本C库的封装,方便使用.同时还提供了多线程操作数据库带来的读 ...

  6. iOS中的数据库—使用FMDB

    一.回顾 iOS中的数据存储方式 1.XML属性列表(plist) 写入OC的一些基本数据类型,不是所有对象都可以写入 2.Preference(偏好设置) 本质还是通过“plist”来存储数据,但是 ...

  7. 使用FMDB事务批量更新数据库

    今天比较闲看到大家在群里讨论关于数据库操作的问题,其中谈到了“事务”这个词,坦白讲虽然作为计算机专业的学生,在上学的时候确实知道存储过程.触发器.事务等等这些名词的概念,但是由于毕业后从事的不是服务器 ...

  8. iOS中使用FMDB事务批量更新数据库

    今天比较闲看到大家在群里讨论关于数据库操作的问题,其中谈到了"事务"这个词,坦白讲虽然作为计算机专业的学生,在上学的时候确实知道存储过程.触发器.事务等等这些名词的概念,但是由于毕 ...

  9. 数据库 - FMDB

    FMDB 是基于 SQLite 封装的 面向对对象(OC) 的API. FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API FMDB 需要libsqli ...

随机推荐

  1. WP8没有开发者账号升级GDR3预览版的方法

    很多希望尝鲜WP8 GDR3的朋友一样希望提前体验GDR3的效果,但苦于没有开发者账号而不得其门!今天为大家带来普通账号升级GDR3的方法! 工具/原料 WP8智能手机 可用wifi热点 方法/步骤 ...

  2. 关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法

    在 Oracle 数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法: 1. A 表的记录导出为一条条分号隔开的 insert 语句,然后执行插入到 B 表中2. 建立数据库间的 ...

  3. CUBRID学习笔记 48查询优化

    cubrid的中sql查询语法 查询优化 c#,net,cubrid,教程,学习,笔记欢迎转载 ,转载时请保留作者信息.本文版权归本人所有,如有任何问题,请与我联系wang2650@sohu.com ...

  4. Learning Roadmap of Deep Reinforcement Learning

    1. 知乎上关于DQN入门的系列文章 1.1 DQN 从入门到放弃 DQN 从入门到放弃1 DQN与增强学习 DQN 从入门到放弃2 增强学习与MDP DQN 从入门到放弃3 价值函数与Bellman ...

  5. Cron表达式简单学习

    CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表.CronTrigger,你可以指定触 ...

  6. iPhone6搜索如何打开?详细使用方法

    iphone6搜索功能在哪?怎么用呢?当iPhone6中安装了太多的应用或者联系人太多时,我们就可以使用iPhone6搜索功能就能快速找到,但是还有很多朋友对于iphone6搜索功能在哪,怎么用还不太 ...

  7. [Prodinner项目]学习分享_第三部分_Service层(业务逻辑层)

    前两节讲到怎样生成一个Model和怎样将Model映射到数据库,这一节将讲到业务逻辑层,也就是Service层. 1.Prodinner架构已经构建好的,基本的增删改查. 假设,我现在想操作第二节中讲 ...

  8. iOS - Mac OS X 终端设置

    Mac OS X 终端设置 1)Finder 中显示资源库 方法一: 在 "终端" 中输入下面的命令: 显示: chflags nohidden ~/Library/ 隐藏: ch ...

  9. JavaScript基础知识汇总

    1. 图片热区: <img src="logo.jpg" usemap="#logo"> <map id="logo" n ...

  10. 在centos7上作用mongodb

    安装服务端 yum install mongodb-server 安装客户端 yum install mongodb 版本 mongo --version 是否安装了mongodbwhich mong ...