数据库 - fmdb 以及精简的 YTKKeyValueStore

开源第三方地址:
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 创建 数据表
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #1d9421}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #c91b13}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font: 14.0px 'PingFang SC'; font-variant-ligatures: no-common-ligatures}span.s4 {font-variant-ligatures: no-common-ligatures; color: #c32275}span.s5 {font-variant-ligatures: no-common-ligatures; color: #294c50}span.s6 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s7 {font-variant-ligatures: no-common-ligatures; color: #c91b13}span.s8 {font: 14.0px 'PingFang SC'; font-variant-ligatures: no-common-ligatures; color: #c91b13}

    // 新建 表
    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 其他
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值