zoukankan      html  css  js  c++  java
  • ios 关于FMDB的基本使用

    先简单介绍一下FMDB,FMDB是iOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言API。使用起来很方便,省去了很多冗余的C语言代码,对比苹果自带的Core Data框架,更加轻量级和灵活,提供了多线程安全的数据库操作方法,有效地防止数据混乱。

    -------------------------------------------------------------------------------------------------------------------

    github地址

    https://github.com/ccgus/fmdb

    具体使用:

    1.将FMDB导入到你的项目中去,然后添加libsqlite3.tbd(xcode7以后的版本).

    2.

    #import <Foundation/Foundation.h>
    
    @interface DataBaseManager : NSObject
    
    //写个单例
    +(instancetype)sharedFMDataBase;
    
    #import "DataBaseManager.h"
    #import "FMDB.h"
    @interface DataBaseManager()
    
    @property (nonatomic,strong) FMDatabase * db;
    
    @end
    
    @implementation DataBaseManager
    
    +(instancetype)sharedFMDataBase{
        static DataBaseManager*manager=nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            manager=[[DataBaseManager alloc]init];
        });
        return manager;
    }
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            NSString*doc=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];//得到数据库
            NSString*filename=[doc stringByAppendingPathComponent:@"students.sqlite"];
            //当数据库文件不存在时会自动创建一个数据库文件。
            
            //判断数据库是否存在
            if (!self.db) {
           //不存在创建
            self.db=[FMDatabase databaseWithPath:filename];
            }
            //为数据库设置缓存,提高查询效率
            [self.db setShouldCacheStatements:YES];
            BOOL open=[self.db open];//测试数据库是否打开成功
            if(open){
                NSLog(@"数据库打开成功");
            }else{
                NSLog(@"数据库打开失败");
            }
            //打开数据库
            if ([self.db open]) {
                if (![self.db tableExists:@"t_student"]) {
                    
                //创建表
                BOOL result=[self.db executeUpdate:
                             @"CREATE TABLES t_student(id INTEGER PRIMARY KEY AUTOINCREAMENT, name TEXT, age TEXT)"];
                
                if (result) {
                    NSLog(@"成功创表");
                }else{
                    NSLog(@"创表失败");
                }
                }
                NSLog(@"已经有表了,不需要重新添加");
            }
    
            //关闭数据库
            [self.db close];
            
        }
        return self;
    }
    

      对数据的基本操作:

    //添加数据
    [self.db open];
        [self.db executeUpdate:@"INSERT INTO t_student(name,age)values(?,?)",@"xiaoming",@"123"];
        [self.db close];
    

      

    //查询数据 
    [self.db open];
        FMResultSet*resultSet=[self.db executeQuery:@"select * from t_student"];
        while ([resultSet next]) {
            int ID = [resultSet intForColumn:@"id"];
            NSString *name = [resultSet stringForColumn:@"name"];
            NSString* age = [resultSet stringForColumn:@"age"];
            NSLog(@"%d %@ %@", ID, name, age);
        }
        [self.db close];
    

     

    //查询某条数据
    NSString*string=[NSString stringWithFormat:@"select age from t_students where id=%d",4];
        
        NSString*str=[self.db stringForQuery:string];
    

      

     

      

  • 相关阅读:
    Linux企业级项目实践之网络爬虫(6)——将程序设计成为守护进程
    Linux企业级项目实践之网络爬虫(5)——处理配置文件
    Linux企业级项目实践之网络爬虫(3)——设计自己的网络爬虫
    Linux企业级项目实践之网络爬虫(4)——主程序流程
    Linux企业级项目实践之网络爬虫(1)——项目概述及准备工作
    Linux企业级项目实践之网络爬虫(2)——网络爬虫的结构与工作流程
    泛化、依赖、关联、聚合、组合
    日常(停课后的月考)
    日常(停课后的月考)
    打击罪犯
  • 原文地址:https://www.cnblogs.com/oldk/p/5287091.html
Copyright © 2011-2022 走看看