美文网首页iOS开发iOS开发札记
数据库 - fmdb 以及精简的 YTKKeyValueStor

数据库 - fmdb 以及精简的 YTKKeyValueStor

作者: 居然是村长 | 来源:发表于2016-03-01 22:49 被阅读1606次

    开源第三方地址:
    fmdb:https://github.com/ccgus/fmdb
    YTKKeyValueStore:https://github.com/yuantiku/YTKKeyValueStore

    需要依赖: libsqlite3.0.dylib

    fmdb 简单使用

    主要还是 SQL 语句去执行操作,SQL 学习传送门 http://www.w3school.com.cn/sql/sql_syntax.asp

    • 1 创建 数据库
        NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
        NSString *dbPath = [path stringByAppendingString:@"/myDB"];
        
        // 新建数据库
        FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
        if ([db open]) {
            NSLog(@"成功打开数据库");// 注意 不用是 close
        }
    
    • 2 创建 数据表
        // 新建 表
        BOOL createTable = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT, age INTEGER)"];
        if (createTable) {
            NSLog(@"成功创建数据表");
        }
    
    • 3 数据表 处理相关 增改删
        // 插入数据
        BOOL insertTable = [db executeUpdate:@"INSERT INTO mytable (name, age) values (?,?)",@"张三",@(13)];
        if (insertTable) {
            NSLog(@"成功插入数据");
        }
        
        // 更新数据
        BOOL updateTable = [db executeUpdate:@"UPDATE mytable SET age = ? WHERE name = ?",@"",@(18)];
        if (updateTable) {
            NSLog(@"成功更新数据");
        }
        
        // 删除数据
        BOOL deleteTabel = [db executeUpdate:@"DELETE FROM mytable WHERE name = ?",@"张三"];
        if (deleteTabel) {
            NSLog(@"成功删除数据");
        }
    
    • 4 数据表 查询
        // 查询 是否 存在
        [db executeStatements:@"SELECT COUNT(*) AS COUNT FROM mytable WHERE name = '张三'" withResultBlock:^int(NSDictionary *resultsDictionary) {
            NSLog(@"%@",resultsDictionary);
            return 0;// 返回 0 表示 正常
        }];
        
        
        // 遍历 查询 result 也需要 close
        FMResultSet *result = [db executeQuery:@"SELECT * FROM mytable"];
        while ([result next]) {
            NSString *name = [result stringForColumn:@"name"];
            int age = [result intForColumn:@"age"];
            NSLog(@"%@ %zi",name,age);
        }
        [result close]
    
    • 5 数据库 error 处理
        [db lastError];
        [db lastErrorMessage];
    
    • 6 fmdb 多线程
        FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
        [queue inDatabase:^(FMDatabase *db) {
           
            [db executeUpdate:@"CREATE TABLE IF NOT EXISTS queuetable (name TEXT, age INTEGER)"];
            [db executeUpdate:@"INSERT INTO queuetable (name,age) values (?,?)",@"张三",@(12)];
            // ... 等 各种 处理。
        }];
    
        // 同样还有 另一个  inTransaction 方法类似,处理大量数据时使用会快一点好像,没实际使用过
    
    • 7 其他

    YTKKeyValueStore 简单使用

    对 fmdb 的2次修改,使用超简单,功能够用,

    • 1 创建 数据库
         NSString *const tableName = @"testTable";
        
        YTKKeyValueStore *store = [[YTKKeyValueStore alloc] initDBWithName:@"test.db"];
        // 注意不用 需要 close
    
    • 2 创建 数据表
        [store createTableWithName:tableName];
    
    • 3 插入数据,key Value 的机制,key已存在会更新数据。不存在则新插入数据
        [store putString:@"张三" withId:@"name" intoTable:tableName];
        [store putNumber:@(12) withId:@"age" intoTable:tableName];
        [store putObject:@[@"语文59分",@"数学58分"] withId:@"score" intoTable:tableName];
    
    • 4 查询 数据
        NSLog(@"%@",[store getAllItemsFromTable:tableName]);
        NSLog(@"%zi",[store getCountFromTable:tableName]);
    
        NSLog(@"%@",[store getStringById:@"name" fromTable:tableName]);
        NSLog(@"%@",[store getNumberById:@"age" fromTable:tableName]);
        NSLog(@"%@",[store getObjectById:@"score" fromTable:tableName]);
        
        // 读取 item 封装的 数据
        YTKKeyValueItem *item = [store getYTKKeyValueItemById:@"name" fromTable:tableName];
        NSLog(@"%@ - %@ - %@",item.itemId,item.itemObject,item.createdTime);// 存的是 string 变成 NSArray 了?
        
    
    • 5 删除 数据
        [store deleteObjectById:@"name" fromTable:tableName];
    
    • 6 其他

    相关文章

      网友评论

        本文标题:数据库 - fmdb 以及精简的 YTKKeyValueStor

        本文链接:https://www.haomeiwen.com/subject/qpqnkttx.html