0
点赞
收藏
分享

微信扫一扫

09.iOS FMDB的基本使用

@(〓〓 iOS-实用技术)[SQLite 数据库]

  • 作者: Liwx
  • 邮箱: 1032282633@qq.com

  • 09.iOS FMDB的基本使用
  • 1.FMDB基本使用
    • FMDB简介
    • FMDB的安装方式
    • FMDB核心类
      • FMDatabase数据库
      • FMResultSet查询结果集
      • FMDatabaseQueue线程安全数据库操作
    • FMDB使用步骤
  • 2.FMDabaseQueue的简单使用
    • FMDabaseQueue简介
    • FMDabaseQueue的使用
  • 3.FMDB FMDatabase类的简单使用
    • 手动集成FMDB步骤
    • 创建数据库和数据表基本步骤
    • FMDatabase数据库的增删改查(CRUD)
  • 4.FMDatabaseQueue数据库队列基本使用
    • 使用FMDatabaseQueue创建数据库
    • FMDatabaseQueue队列数据库的增删改查(CRUD)

1.FMDB基本使用

FMDB简介

  • 1.什么是FMDB?
  • 2.FMDB有什么优势?

FMDB的安装方式

  • 1.Cocoapods
  • 2.手动集成
    • 1.下载FMDB框架
      FMDB GitHub链接: https://github.com/ccgus/fmdb

FMDB核心类

FMDatabase数据库

FMResultSet查询结果集

FMDatabaseQueue线程安全数据库操作


FMDB使用步骤

  • 1.打开数据库
    通过指定SQLite数据库文件路径来创建FMDatabase对象

    • 具体文件路径
    • 空字符串@""
    • nil
// 1.打开数据库
FMDatabase *db = [FMDatabase databaseWithPath:path];
if ([db open])  { NSLog(@"打开成功!"); }

  • 2.执行更新

// FMDB更新方法
-(BOOL)executeUpdate:(NSString)sql, ...
-(BOOL)executeUpdateWithFormat:(NSString
)format, ...
-(BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments

  • 执行更新示例:
// 2.执行更新
[db executeUpdate:@"UPDATE t_student SET age = ? WHERE name = ?;", @20, @"Jack"]

  • 3.执行查询
    • 查询方法
    - (FMResultSet *)executeQuery:(NSString*)sql, ...
    - (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...
    - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments
  • 执行查询示例:
// 查询数据
FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];

// 遍历结果集
while ([rs next]) {
    NSString *name = [rs stringForColumn:@"name"];
    int age = [rs intForColumn:@"age"];
    double score = [rs doubleForColumn:@"score"];
}

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

2.FMDabaseQueue的简单使用

FMDabaseQueue简介

FMDabaseQueue的使用

  • 1.FMDatabaseQueue的使用
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];
简单使用
    [queue inDatabase:^(FMDatabase *db) {
        [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jack"];
        // 查询
        FMResultSet *rs = [db executeQuery:@"select * from t_student"];
    }];
使用事务
    [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
        [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jack"];
        //查询
        FMResultSet *rs = [db executeQuery:@"select * from t_student"];
    }];

3.FMDB FMDatabase类的简单使用


手动集成FMDB步骤

  • 1.下载FMDB框架
  • 2.将fmdb框架文件夹拖入工程


  • 3.添加系统依赖库sqlite3.0.tbd


  • 4.导入FMDB.h头文件,编译成功.集成FMDB完成


创建数据库和数据表基本步骤

  • 1.拼接数据库存储的沙盒路径
  • 2.通过路径创建数据库
  • 3.打开数据库
    • 如果成功打开数据库后,创建数据表.

  • 创建数据库和数据表参考代码

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 0.拼接数据库存放的沙盒路径
    NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
    NSString *sqlFilePath = [path stringByAppendingPathComponent:@"student.sqlite"];
    
    // 1.通过路径创建数据库
    self.db = [FMDatabase databaseWithPath:sqlFilePath];
    
    // 2.打开数据库
    if ([self.db open]) {
        NSLog(@"打开成功");
        
        BOOL success = [self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER DEFAULT 1)"];
        
        if (success) {
            NSLog(@"创建表成功");
        } else {
            NSLog(@"创建表失败");
        }
        
    } else {
        NSLog(@"打开失败");
    }
}

FMDatabase数据库的增删改查(CRUD)

  • 1.插入数据
// 插入数据
static NSInteger age = 10;
age++;

BOOL success = [self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);", @"jack", @(age)];

if (success) {
    NSLog(@"插入成功");
} else {
    NSLog(@"插入失败");
}
  • 2.删除数据
// 删除数据
BOOL success = [self.db executeUpdate:@"DELETE FROM t_student WHERE age > 20 AND age < 25;"];
  • 3.修改数据
// 修改数据
BOOL success = [self.db executeUpdate:@"UPDATE t_student SET name = 'liwx' WHERE age > 12 AND age < 15;"];
  • 4.查询数据
// 查询数据
FMResultSet *result = [self.db executeQuery:@"SELECT id, name, age FROM t_student WHERE age > 25;"];

while ([result next]) {
    int ID = [result intForColumnIndex:0];
    NSString *name = [result stringForColumnIndex:1];
    int age = [result intForColumn:@"age"];
    
    NSLog(@"ID: %zd, name: %@, age: %zd", ID, name, age);
}

4.FMDatabaseQueue数据库队列基本使用

使用FMDatabaseQueue创建数据库

  • 1.创建一个FMDatabaseQueue对象
  • 2.使用block传递数据库
  • 3.使用SQL语句创建数据表
- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 0.拼接数据库存放的沙盒路径
    NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
    NSString *sqlFilePath = [path stringByAppendingPathComponent:@"student.sqlite"];
    
    // 1.创建一个FMDatabaseQueue对象
    // 只要创建数据库队列对象, FMDB内部就会自动给我们加载数据库对象
    self.dbQueue = [FMDatabaseQueue databaseQueueWithPath:sqlFilePath];
    
    // 2.执行操作
    // 会通过block传递队列中创建好的数据库
    [self.dbQueue inDatabase:^(FMDatabase *db) {
        
        BOOL success = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER DEFAULT 1);"];
        
        if (success) {
            NSLog(@"创建表成功");
        } else {
            NSLog(@"创建表失败");
        }
        
    }];
    
}

FMDatabaseQueue队列数据库的增删改查(CRUD)

  • 1.插入数据
- (IBAction)insertClick {
    
    static NSInteger age = 10;
    age++;
    
    [self.dbQueue inDatabase:^(FMDatabase *db) {
        
        BOOL success = [db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);", @"jack", @(age)];
        
        if (success) {
            NSLog(@"插入成功");
        } else {
            NSLog(@"插入失败");
        }
    }];
    
}
  • 2.删除数据
// 删除数据
[self.dbQueue inDatabase:^(FMDatabase *db) {
    
    BOOL success = [db executeUpdate:@"DELETE FROM t_student WHERE age > 20 AND age < 25;"];
        
    // 判断是否SQL是否执行成功   
    // ...
}
  • 3.修改数据
// 修改数据
[self.dbQueue inDatabase:^(FMDatabase *db) {
        
    BOOL success = [db executeUpdate:@"UPDATE t_student SET name = 'liwx' WHERE age > 12 AND age < 15;"];
    
    // 判断是否SQL是否执行成功  
    // ...
}
  • 4.查询数据
// 查询数据
- (IBAction)queryClick {
    
    [self.dbQueue inDatabase:^(FMDatabase *db) {
        
        FMResultSet *result = [db executeQuery:@"SELECT id, name, age FROM t_student WHERE age > 25;"];
        
        while ([result next]) {
            int ID = [result intForColumnIndex:0];
            NSString *name = [result stringForColumnIndex:1];
            int age = [result intForColumn:@"age"];
            
            NSLog(@"ID: %zd, name: %@, age: %zd", ID, name, age);
        }
    }];
    
    
}
举报

相关推荐

0 条评论