数据库使用fmdb
#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的更多相关文章
- iOS开发数据库篇—FMDB简单介绍
iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...
- iOS开发数据库篇—FMDB数据库队列
iOS开发数据库篇—FMDB数据库队列 一.代码示例 1.需要先导入FMDB框架和头文件,由于该框架依赖于libsqlite库,所以还应该导入该库. 2.代码如下: // // YYViewContr ...
- SQLite数据库框架--FMDB简单介绍
1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码 对比 ...
- iOS 数据库第三方FMDB的简单使用
一 FMDB的简单说明及介绍 FMDB的github地址 https://github.com/ccgus/fmdb FMDB是一款简洁的,易用的封装库,简单介绍一下FMDB的使用 在FMDB下载文件 ...
- iOS:第三方数据库文件FMDB的使用
第三方数据库FMDB •FMDB的使用:在sqlite的基础上,将sqlite中的函数进行封装产生的一个数据库文件. –FMDB的好处是对基本C库的封装,方便使用.同时还提供了多线程操作数据库带来的读 ...
- iOS中的数据库—使用FMDB
一.回顾 iOS中的数据存储方式 1.XML属性列表(plist) 写入OC的一些基本数据类型,不是所有对象都可以写入 2.Preference(偏好设置) 本质还是通过“plist”来存储数据,但是 ...
- 使用FMDB事务批量更新数据库
今天比较闲看到大家在群里讨论关于数据库操作的问题,其中谈到了“事务”这个词,坦白讲虽然作为计算机专业的学生,在上学的时候确实知道存储过程.触发器.事务等等这些名词的概念,但是由于毕业后从事的不是服务器 ...
- iOS中使用FMDB事务批量更新数据库
今天比较闲看到大家在群里讨论关于数据库操作的问题,其中谈到了"事务"这个词,坦白讲虽然作为计算机专业的学生,在上学的时候确实知道存储过程.触发器.事务等等这些名词的概念,但是由于毕 ...
- 数据库 - FMDB
FMDB 是基于 SQLite 封装的 面向对对象(OC) 的API. FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API FMDB 需要libsqli ...
随机推荐
- [poj2828] Buy Tickets (线段树)
线段树 Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must ...
- 手机测试pc端网页
在这个问题上徘徊了 一个钟头了,终于被我找到方法了,就赶紧记下来,以后好查阅!! 主要问题在防火墙,防火墙阻当了80端口,所以怎么用手机访问都是访问不了的.把防火墙关闭就好了! 贴上httpd-vho ...
- python成长之路【第六篇】:python模块--time和datetime
1.时间表现形式 时间戳 (1970年1月1日之后的秒,即:time.time())格式化的时间字符串 (2014-11-11 11:11, 即:time.strftime('%Y-%m- ...
- linux tar.gz
tar命令用于对文件打包压缩或解压,格式为:“tar [选项] [文件]”. 打包并压缩文件:“tar -czvf 压缩包名.tar.gz 文件名” 解压并展开压缩包:“tar -xzvf 压缩包名. ...
- js之oop <三>属性标签
读取属性标签 获取对象属性标签,用 Object.getOwnPropertyDescriptor方法.getOwnPropertyDescriptor(); 参数:属性所在对象(object),属性 ...
- hdu4987A simple probability problem.(凸包)
链接 多校的最后一场,当时没看懂题意,看题目还以为是概率问题就没深看. 官方题解 对于他说的第一种,考虑长为L的线段 概率为2L/(pi*d), 可以理解,下面的就不知道在说啥了.. 按我初始的想法想 ...
- 【转】Spring jar包详解
转载自:http://www.cnblogs.com/yanjunwu/archive/2013/04/06/3001927.html org.springframework.aop ——Spring ...
- How to remove k__BackingField from Json data
当用DataContractJsonSerializer类序列化对象为Json时,发现序列化后的json对象,每个属性都带有k__BackingField后缀,像这样: 解决办法:为要被序列化的类打上 ...
- laravel 加中间件的方法 防止直接打开后台
路由 routes.php Route::group(['middleware' => ['web','admin.login.login']], function () { //后台首页路由 ...
- python核心编程第六章练习6-11
6-11.转换.(a)创建一个从整型到IP地址的转换,如下格式:www.xxx.yyy.zzz.(b)更新你的程序,使之可以逆转换.[答案](a)代码如下: Input_number = abs(in ...