OC_FMDB有'深度'的DEMO

来源:互联网 发布:啥软件下种子 编辑:程序博客网 时间:2024/03/28 17:36

一、简单介绍

一)、FMDB框架中重要的框架类

  1. FMDatabase

    FMDatabase对象就代表一个单独的SQLite数据库,用来执行SQL语句

  2. FMResultSet

    使用FMDatabase执行查询后的结果集

  3. FMDatabaseQueue

    用于在多线程中执行多个查询或更新,它是线程安全的

二)、FMDB思维导图


iOS2期思维导图学习

二、使用

一)、封装结构


二)、模块代码

  • DBHeader.h
/** 表名 */`#define KTable_UserName1 @"KTable_UserName1"/** 一个存数据库需要的头文件 */#import "FMDB.h"#import "DAO.h"#import "DataBaseManager.h"
  • DataBaseManager.h
@implementation DataBaseManager//单例+(instancetype)sharedManager{    static DataBaseManager *manager = nil;    static dispatch_once_t once;    dispatch_once(&once, ^{        manager = [[DataBaseManager alloc] init];    });    return manager;}- (instancetype)init{    if (self = [super init]) {        NSString *docDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];        NSString *filePath = [docDir stringByAppendingPathComponent:@"DB1.sqlite"];        NSLog(@"路径 = %@",filePath);        _databaseQueue = [FMDatabaseQueue databaseQueueWithPath:filePath];    }    return self;}@end
  • DAO.m
- (FMDatabaseQueue *)databaseQueue{    return [DataBaseManager sharedManager].databaseQueue;;}+ (void)creatTableIfNeed{    //【注意】:以后做sql语句,()外面的参数用字符串拼,()里面的参数放在执行方法里写    NSString *sql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@ (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, score REAL,arr BLOB,dic BLOB,book BLOB,img BLOB)",KTable_UserName1];    [[DataBaseManager sharedManager].databaseQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {        if ([db executeUpdate:sql]) {            NSLog(@"创建表成功");        }    }];}
  • UserDAO.h
@interface UserDAO : DAO     //一定要继承DAO,不然self点不出来databaseQueue的///单例+(instancetype)sharedInstance;/*! *  插入数据 */- (BOOL)insertUserDTO:(UserDTO *)dto;/*! *  获取数据 */- (NSArray *)loadUserData;/*! *  修改数据 */- (BOOL)updateUserDTO:(UserDTO *)dto;/*! *  删除某个模型 */- (BOOL)deleteUserDTO:(UserDTO *)dto;@end

三)、常用sql语句

创建表

CREATE TABLE IF NOT EXISTS "T_Person" (      "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,      "name" TEXT,      "age" INTEGER,      "heigth" REAL)//下边是sqllite编译器里边的语句/*简单约束*/CREATE TABLE IF NOT EXISTS t_student(      id INTEGER PRIMARY KEY AUTOINCREMENT,      name TEXT,      age INTEGER);CREATE TABLE IF NOT EXISTS t_student(     id INTEGER PRIMARY KEY AUTOINCREMENT,     name TEXT UNIQUE,     age INTEGER);/*添加主键*/CREATE TABLE IF NOT EXISTS t_student(     id INTEGER PRIMARY KEY AUTOINCREMENT,     name TEXT,     age INTEGER,     score REAL);/*添加主键*/CREATE TABLE IF NOT EXISTS t_student(     id INTEGER,     name TEXT,     age INTEGER,     score REAL,     PRIMARY KEY(id));

查询

  /*分页*/ SELECT * FROM t_student ORDER BY id ASC LIMIT 30, 10;  /*排序*/ SELECT * FROM t_student WHERE score > 50 ORDER BY age DESC; SELECT * FROM t_student WHERE score < 50 ORDER BY age ASC , score DESC; /*计量*/ SELECT COUNT(*) FROM t_student WHERE age > 50; /*别名*/ SELECT name as myName, age as myAge, score as myScore FROM t_student; SELECT name myName, age myAge, score myScore FROM t_student; SELECT s.name myName, s.age myAge, s.score myScore FROM t_student s WHERE s.age > 50; /*查询*/ SELECT name, age, score FROM t_student; SELECT * FROM t_student;

更新

 UPDATE t_student SET name = 'MM' WHERE age = 10; UPDATE t_student SET name = 'WW' WHERE age is 7; UPDATE t_student SET name = 'XXOO' WHERE age < 20; UPDATE t_student SET name = 'NNMM' WHERE age < 50 and score > 10; /*更新记录的name*/ UPDATE t_student SET name = 'zhangsan';

删除

 DELETE FROM t_student; DELETE FROM t_student WHERE age < 50;

插入

INSERT INTO t_student (age, score, name) VALUES ('28', 100, 'zhangsan'); INSERT INTO t_student (name, age) VALUES ('lisi', '28'); INSERT INTO t_student (score) VALUES (100);

删除表

/*删除表*/ DROP TABLE IF EXISTS t_student;



文/Se7ven(简书作者)
原文链接:http://www.jianshu.com/p/502716a7728b
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
0 0
原创粉丝点击