SQLite —— FMDB

原创 2015年07月09日 15:16:29

#import <Foundation/Foundation.h>

#import "FMDB.h"


@interface CustomDatabase : NSObject

{

    

}


@property (nonatomic, strong) FMDatabase  *db;


//查询数据库结果

@property (nonatomic,strongNSMutableArray *resultSet;


- (void)createSQL;

- (void)createTab:(NSString *)table CreatTable:(NSString*)sql;

- (void)deleteTab:(NSString *)table;

- (BOOL)insertTab:(NSString *)table CreatTable:(NSString *)setup SQL:(NSString*)sql, ...;

- (BOOL)updateTab:(NSString *)table CreatTable:(NSString *)setup SQL:(NSString *)sql;

- (void)queryTab: (NSString *)table CreatTable:(NSString *)setup SQL:(NSString *)sql;



@end





//

//  CustomDatabase.m

//  DB

//

//  Created by 龙凤 on 15/4/11.

//  Copyright (c) 2015 William. All rights reserved.

//


#import "CustomDatabase.h"


@implementation CustomDatabase



//创建(打开)数据库

- (void)createSQL

{

    //设置数据库文件夹

    NSArray *library = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);

    NSString *strSQL = [[library objectAtIndex:0] stringByAppendingPathComponent:@"sqlite"];

    BOOL directory = YES;

    if (![[NSFileManager defaultManager] fileExistsAtPath:strSQL isDirectory:&directory])

    {

        [[NSFileManager defaultManager] createDirectoryAtPath:strSQL withIntermediateDirectories:NO attributes:nil error:nil];

    }

    

    //获取并打开数据库(没有时自动创建)

    if (!self.db)

    {

        //设置数据库文件

        NSString *strTab = [strSQL stringByAppendingPathComponent:@"commodity1.db"];

        self.db = [FMDatabase databaseWithPath:strTab];

    }

    

    [self.db setShouldCacheStatements:YES];//一般设置数据库使用缓存,提高效率

    

    self.resultSet = [NSMutableArray array];

}



//创建表

- (void)createTab:(NSString *)table CreatTable:(NSString*)sql

{

    if (!self.db) [self createSQL];//创建数据库

    if (![self.db open]) return;

    

    //创建表(FMDB中只有updatequery操作,除了查询其他都是update操作)

    if (!sql) return;

    

    if (![self.db tableExists:table])

    {

        [self.db executeUpdate:sql];

        NSLog(@"创建表成功");

    }

    else

    {

        NSLog(@"表已经存在");

    }


}




//删除

- (void)deleteTab:(NSString *)table

{

    if (!self.db) [self createSQL];//创建数据库

    if (![self.db open]) return;

    if (![self.db tableExists:table]) return;

    

    //删除数据

    BOOL delete = [self.db executeUpdate:[NSString stringWithFormat:@"delete from %@",table]];

    if (delete) {

        NSLog(@"删除表成功");

    }

    [self.db close];//关闭数据库

}






//插入

- (BOOL)insertTab:(NSString *)table CreatTable:(NSString *)setup SQL:(NSString*)sql, ...

{

    if (!self.db) [self createSQL];//创建数据库

    if (![self.db open]) return NO;

    if (![self.db tableExists:table]) [self createTab:table CreatTable:setup];

    

    //插入数据

    if (!sql) return NO;

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

    id arg;

    va_list arglist;

    va_start(arglist, sql);

    NSString *formatStr = [[NSString alloc] initWithFormat:sql arguments:arglist];

    for (arg=va_arg(arglist,id); arg!=nil;)

    {

        [argsArray addObject:arg];

        (arg = va_arg(arglist,id));

    }

    va_end(arglist);

    

    BOOL inseart = NO;

    switch (argsArray.count) {

        case 2:

            inseart = [self.db executeUpdate:formatStr,argsArray[0],argsArray[1]];

            break;

        case 3:

            inseart = [self.db executeUpdate:formatStr,argsArray[0],argsArray[1],argsArray[2]];

            break;

        case 4:

            inseart = [self.db executeUpdate:formatStr,argsArray[0],argsArray[1],argsArray[2],argsArray[3]];

            break;

        case 5:

            inseart = [self.db executeUpdate:formatStr,argsArray[0],argsArray[1],argsArray[2],argsArray[3],argsArray[4]];

            break;

        case 6:

            inseart = [self.db executeUpdate:formatStr,argsArray[0],argsArray[1],argsArray[2],argsArray[3],argsArray[4],argsArray[5]];

            break;

        case 7:

            inseart = [self.db executeUpdate:formatStr,argsArray[0],argsArray[1],argsArray[2],argsArray[3],argsArray[4],argsArray[5],argsArray[6]];

            break;

        case 8:

            inseart = [self.db executeUpdate:formatStr,argsArray[0],argsArray[1],argsArray[2],argsArray[3],argsArray[4],argsArray[5],argsArray[6],argsArray[7]];

            break;

        case 9:

            inseart = [self.db executeUpdate:formatStr,argsArray[0],argsArray[1],argsArray[2],argsArray[3],argsArray[4],argsArray[5],argsArray[6],argsArray[7],argsArray[8]];

            break;

        case 10:

            inseart = [self.db executeUpdate:formatStr,argsArray[0],argsArray[1],argsArray[2],argsArray[3],argsArray[4],argsArray[5],argsArray[6],argsArray[7],argsArray[8],argsArray[9]];

            break;

        case 11:

            inseart = [self.db executeUpdate:formatStr,argsArray[0],argsArray[1],argsArray[2],argsArray[3],argsArray[4],argsArray[5],argsArray[6],argsArray[7],argsArray[8],argsArray[9],argsArray[10]];

            break;

        default:

            break;

    }


    [self.db close];//关闭数据库

    

    return inseart;

}



//修改

- (BOOL)updateTab:(NSString *)table CreatTable:(NSString *)setup SQL:(NSString *)sql

{

    if (!self.db) [self createSQL];//创建数据库

    if (![self.db open]) return NO;

    if (![self.db tableExists:table]) [self createTab:table CreatTable:setup];

    

    //修改数据

    BOOL update = [self.db executeUpdate:sql];

    

    [self.db close];//关闭数据库

    return update;

}



//查询

- (void)queryTab:(NSString *)table CreatTable:(NSString *)setup SQL:(NSString *)sql

{

    if (!self.db) [self createSQL];//创建数据库

    if (![self.db open]) return;

    if (![self.db tableExists:table]) [self createTab:table CreatTable:setup];

    

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

    

    //查询数据

    [self.resultSet removeAllObjects];

    FMResultSet *resultSet = [self.db executeQuery:sql];

    while ([resultSet next])

    {

        [self.resultSet addObject:[resultSet resultDictionary]];

    }

    

    

    [self.db close];//关闭数据库

}


@end





【iOS功能实现】之:使用FMDB连接SQLite

前言 http://blog.devtang.com/blog/2012/04/22/use-fmdb/ SQLite (http://www.sqlite.org/docs.html) 是一个轻...
  • xuqiang918
  • xuqiang918
  • 2013年09月16日 10:10
  • 769

SQLite(FMDB) 线程安全 - 多线程处理

http://www.saick.net/blog/2013/12/12/sqlite-xian-cheng-an-quan-duo-xian-cheng-chu-li/
  • fg313071405
  • fg313071405
  • 2014年05月13日 10:12
  • 7257

Objective-c通过FMDB操作SQLite数据库的步骤

Objective-c通过FMDB操作SQLite数据库的步骤: 1.安裝FMDB 下载FMDB 引入相关文件 2.打开数据库 NSString *d...
  • liuzhihui666
  • liuzhihui666
  • 2017年03月18日 10:32
  • 95

FMDB/SQLCipher数据库加密

在iOS开发过程中经常需要用到SQLite来存储数据,由于Apple的沙盒机制,我们App的数据存储在沙盒里面,一般情况下无法拿到数据,但是iOS管理软件iFunBox可以读取到应用程序沙盒里面的文件...
  • u013134119
  • u013134119
  • 2016年11月09日 10:48
  • 321

Realm、WCDB与SQLite移动数据库性能对比测试

还在通过FMDB用繁琐的SQL语句操作移动端数据库吗?要不要试试Realm或者WCDB?
  • Cloudox_
  • Cloudox_
  • 2017年07月12日 14:45
  • 2657

【iOS】【FMDB】【sqlite】try catch实现事务处理

批量操作数据库的时候,我们经常会用到事务处理。事务是访问并可能更新数据库各种数据项的数据单元(unit),是恢复和并发的控制的基本单位。事务具有四个属性。 - 原子性(atomicity):一个事务...
  • shamingai
  • shamingai
  • 2015年11月09日 14:04
  • 1224

iOS FMDB的使用(增,删,改,查,sqlite存取图片)

在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FMDB的使用... 例: 增,删,改,查,sqlite存取图...
  • Chowbindeblog
  • Chowbindeblog
  • 2016年05月16日 11:15
  • 1834

FMDB取出所有数据

@interface DBfaceCleanserViewController () @property (nonatomic,strong) FMDatabase *db; @propert...
  • QianShouYuZhiBo
  • QianShouYuZhiBo
  • 2015年10月22日 20:16
  • 1891

iOS-FMDB事务操作SQLite数据库

批量操作数据库的时候,我们经常会用到事务处理。事务是访问并可能更新数据库各种数据项的数据单元(unit),是恢复和并发的控制的基本单位。事务具有四个属性。 - 原子性(atomicity):一个事...
  • qiuxuewei2012
  • qiuxuewei2012
  • 2016年07月08日 16:28
  • 3124

sqlite语句,关于使用FMDB操作带有外键的数据库

1.创建外键 CREATE TABLE track(   trackid     INTEGER,   trackname   TEXT,   trackartist INTEGER,   FO...
  • yohunl
  • yohunl
  • 2013年10月31日 14:03
  • 10323
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQLite —— FMDB
举报原因:
原因补充:

(最多只允许输入30个字)