CCSQLite 3.0.4

CCSQLite 3.0.4

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布时间最新发布2020年6月

ai mac 维护。



CCSQLite 3.0.4

  • CC

Platform Languages Swift 3.0.x Version License

CCSQLite 是围绕 SQLite 的一个 Cocoa / Objective-C 包装器。YapDatabase(键/值存储)+ FMDB。

bug 或建议

邮箱:[email protected]


CCSQLite


中文 README


目的

  • 调整 FMDB 到 ARC 模式
  • YapDatabase 键/值存储
  • CCSQLite 合并 FMDB + YapDatabase 键/值
  • 支持 OBJECT、JSON 到键/值


原因 && 为什么要这样做


当我写 "HSCache [缓存处理]" 时,我想选择 FMDB 或 YapDatabase,但它们看起来很不同。所以我只想 [YapDatabase(键/值存储)+ FMDB],同时在路上尝试 CCSQLite。

大于版本 1.1.1 的更改


CCSQLite CCSQLiteMac Screenshot

Podfile

pod 'CCSQLite'

demo 示例

Objective-C 专用

查看 CCSQLiteDemo
iOS CCSQLiteiOSDemo
OSX CCSQLiteOSXDemo

for Swift call Objective-C

iOS CCSQLiteDataiOS
OSX CCSQLiteDatamacOS

demo code

#import <CCSQLite.h>

#import "CCSQLite.h"

#import "CCSQLite/CCSQLite.h"
+ (void) SQLiteTest {
    NSLog(@"SQLiteTest");
    
    NSString *path = nil;
#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
    path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)  lastObject];
#else
    path = NSTemporaryDirectory() ;
#endif
    
    path = [path stringByAppendingPathComponent:CCSQLiteTestDB];
    
    if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
        [[NSFileManager defaultManager] removeItemAtPath:path error: nil];
    }
    
    CCSQLite *SQLite = [CCSQLite databaseWithPath: path];

    if ([SQLite open]) {
        BOOL result = [SQLite executeUpdate: @"create table if not exists t_student (id integer primary key autoincrement, name text not NULL, age integer not NULL);"];
        if (result) {
            NSLog(@"create table t_student ok");
            NSLog(@"path : %@", path);
       }
    }
    
    [SQLite executeUpdate:@"insert into t_student (name, age) values (?, ?);", @"cc test 0", @0];
    [SQLite executeUpdate:@"insert into t_student (name, age) values (?, ?);", @"cc test 1", @1];
    [SQLite executeUpdateWithFormat:@"insert into t_student (name, age) values (%@, %i);", @"cc test 2", 2000];
    
//    [SQLite executeUpdate:@"delete from t_student where id = ?", @1];
    
    CCResultSet *resultSet = [SQLite executeQuery:@"select * from t_student;"];
    while ([resultSet next]) {
        int idNum = [resultSet intForColumn:@"id"];
        NSString *name = [resultSet objectForColumnName:@"name"];
        int age = [resultSet intForColumn:@"age"];
        
        NSLog(@"id = %d name = %@ age = %d", idNum, name, age);
    }
    
//    [SQLite executeUpdate:@"drop table if exists t_student;"];
    
    NSString *sql = @"create table bulktest1 (id integer primary key autoincrement, x text);"
    "create table bulktest2 (id integer primary key autoincrement, y text);"
    "create table bulktest3 (id integer primary key autoincrement, z text);"
    "insert into bulktest1 (x) values ('XXX');"
    "insert into bulktest2 (y) values ('YYY');"
    "insert into bulktest3 (z) values ('ZZZ');";
    
    BOOL success = [SQLite executeStatements:sql];
    
    if (success) {
        NSLog(@"success");
    }
    
    sql = @"select count(*) as count from bulktest1;"
    "select count(*) as count from bulktest2;"
    "select count(*) as count from bulktest3;";
    
    [SQLite executeStatements:sql withResultBlock:^int(NSDictionary *resultsDictionary) {
        NSInteger count = [resultsDictionary[@"count"] integerValue];
        NSLog(@"count = %ld", count);
        return 0;
    }];
    
    [SQLite close];
    
    CCSQLiteQueue *queue = [CCSQLiteQueue databaseQueueWithPath:path];
    
    __block NSInteger index = 3000;
    [queue inDatabase:^(CCSQLite *db) {
        while (index < 3100) {
            index++;
            [db executeUpdate:@"insert into t_student (name, age) values (?, ?);", [NSString stringWithFormat:@"cc test inDatabase %ld", index], @(index)];
        }

    }];
    
    [queue inTransaction:^(CCSQLite *db, BOOL *rollback) {
        NSLog(@"rollback NO");
        while (index < 3150) {
            index++;
            [db executeUpdate:@"insert into t_student (name, age) values (?, ?);", [NSString stringWithFormat:@"cc test inTransaction %ld", index], @(index)];
        }
    }];
    
    [queue inTransaction:^(CCSQLite *db, BOOL *rollback) {
        NSLog(@"rollback YES");
        while (index < 3200) {
            index++;
            [db executeUpdate:@"insert into t_student (name, age) values (?, ?);", [NSString stringWithFormat:@"cc test inTransaction %ld", index], @(index)];
            
            if (index == 3188) {
                *rollback = YES;
                return ;
            }
        }
    }];
}

CCKeyValue demo code

    CCKeyValue *kv = [CCKeyValue defaultKeyValueWithPath:path];
    kv.valueType = CCKeyValueTypeJson;
    
    NSData * data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"CCJSON" ofType:@"json"]];
    
    [kv setObject:data key:@"jsonkey"];
    
    id CCJSON =  [kv objectForKey:@"jsonkey"];
    
    if ([CCJSON isKindOfClass:[NSArray class]]) {
        NSArray *list = CCJSON;
        
        [list enumerateObjectsUsingBlock:^(NSDictionary *d, NSUInteger idx, BOOL * _Nonnull stop) {
            NSLog(@"%@\n", d);
        }];
    }

结果 CCKeyValue 截图

Swift call Objective-C

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        CCSQLiteData.writeList()
        if let list = CCSQLiteData.readList() {
            print(list)
        }
    }

MIT许可协议


MIT许可协议

版权所有 (c) 2016-至今 ccworld1000 | bug : [email protected]

在此特此许可任何获得本软件及其相关文档副本(以下简称“软件”)的个人,免费使用该软件,不受限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许获得软件的个人进行上述操作,但以下条件适用:

上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。

软件按“现状”提供,不提供任何形式的保证,无论是明示的、暗示的还是其他形式的,包括但不限于适销性、针对特定目的的适用性和非侵权性。在任何情况下,作者或版权所有者均不对基于合同、侵权或其他原因产生的任何索赔、损害或其他责任承担责任,无论该索赔、损害或其他责任是出于、与或源于软件、软件的使用或其他操作。


其他许可协议


FMDB 许可协议

YapDatabase 许可协议