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];
    

      

     

      

  • 相关阅读:
    x64 平台开发 Mapxtreme 编译错误
    hdu 4305 Lightning
    Ural 1627 Join(生成树计数)
    poj 2104 Kth Number(可持久化线段树)
    ural 1651 Shortest Subchain
    hdu 4351 Digital root
    hdu 3221 Bruteforce Algorithm
    poj 2892 Tunnel Warfare (Splay Tree instead of Segment Tree)
    hdu 4031 Attack(BIT)
    LightOJ 1277 Looking for a Subsequence
  • 原文地址:https://www.cnblogs.com/oldk/p/5287091.html
Copyright © 2011-2022 走看看