Installing
Installation with CocoaPods
platform :ios, '8.2'
pod 'RTDB'
Installation by cloning the repository
https://github.com/FuihuiC/RTDB)
Use New (How To Use
- RTDB
// Open DB
NSError *err;
[[RTDB sharedInstance] openWithPath:@"~/RTDB.sqlite3" withError:&err];
// creat table
[[RTDB sharedInstance]
execQuery:@"CREATE TABLE if not exists 'DB' \
('name' 'TEXT', 'data' 'BLOB', 'n' 'REAL', 'date' 'REAL', \
'f' 'REAL', 'd' 'REAL', 'c' 'INTEGER', 'uc' 'INTEGER')", nil];
// insert
/**
* sql like
* @"INSERT INTO DB (name, data, n, date, f, d, c, uc) \
* VALUES (:name, :data, :n, :date, :f, :d, :c, :uc)"
* is supported better.
*/
[[RTDB sharedInstance] execQuery:
@"INSERT INTO DB (name, data, n, date, f, d, c, uc) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
@"_name",
[@"test" dataUsingEncoding:NSUTF8StringEncoding],
[NSDate date],
[NSNumber numberWithDouble:123.213124324],
@(1.2),
@(1.2123124),
@(-'c'),
@('c'),
nil];
// select
RTNext *next = [[RTDB sharedInstance] execSql:@"SELECT * FROM DB", nil];
[next enumAllSteps:^(NSDictionary *dic, int step, BOOL *stop, NSError *err) {
if (!err) {
NSLog(@"%@", dic);
} else {
// err handle.
}
}];
BOOL step = [next step]; // When sqlite3_step() == SQLITE_ROW, return YES.
- RTDBDefault
// creat table for model class.
NSError *err;
[[RTDBDefault sharedInstance] creatTable:[DB class] withError:&err];
/**
* @interface DB : NSObject
* // _id is needed for primary key
* @property (nonatomic, assign) NSInteger _id;
* @end
*/
DB *obj = [[DB alloc] init];
// insert
[[RTDBDefault sharedInstance] insertObj:obj withError:&err];
// update
[[RTDBDefault sharedInstance] updateObj:obj withError:&err];
// delete
[[RTDBDefault sharedInstance] deleteObj:obj withError:&err];
NSArray <DB *>*arr = [[RTDBDefault sharedInstance]
fetchObjSql:@"SELECT * FROM DB order by _id" withError:&err];
NSArray <NSDictionary *>*arr = [[RTDBDefault sharedInstance]
fetchSql:@"SELECT * FROM DB order by _id" withError:&err];
- [RTDB sharedInstance].onSync or [RTDBDefault sharedInstance].onSync
While using .onSync, [RTDB sharedInstance] or [RTDBDefault sharedInstance] it doesn't matter to select which one.
// open database
[RTDB sharedInstance]
.onSync
.onOpen(@"~/RTDB.sqlite3")
.onError(^(NSError *err) {
NSLog(@"%@", err);
});
// creat table
[RTDB sharedInstance]
.onSync
.execArgs(@"CREATE TABLE if not exists 'DB' \
('name' 'TEXT', 'data' 'BLOB', 'n' 'REAL', 'date' 'REAL', 'f' \
'REAL', 'd' 'REAL', 'c' 'INTEGER', 'uc' 'INTEGER')", nil)
.onDone()
.onError(^(NSError *err) {
NSLog(@"%@", err);
});
// insert
[RTDB sharedInstance]
.onSync
.execArgs(
@"INSERT INTO DB (name, data, n, date, f, d, c, uc) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
@"name",
[@"name" dataUsingEncoding:NSUTF8StringEncoding],
@(1),
[NSDate date],
@(1.412),
@(0.31231),
@(-'e'),
@('e'),
nil)
.onDone()
.onError(^(NSError *err) {
NSLog(@"%@", err);
});
// select
[RTDB sharedInstance]
.onSync
.onQueue(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0))
.execArgs(@"SELECT * FROM DB", nil)
// .onQueue(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0))
.onEnum(^(NSDictionary *dic, int step, BOOL *stop){
NSLog(@"%@", dic);
NSLog(@"%d", step);
NSLog(@"%@", [NSThread currentThread]);
})
.onError(^(NSError *err) {
NSLog(@"%@", err);
});
/**
* @interface DB : NSObject
*
* @property (nonatomic, assign) NSInteger _id; // _id is needed for primary key
* @end
*/
DB *obj = [[DB alloc] init];
// insert
[RTDB sharedInstance]
.onSync
.onDefault
.onInsert(obj)
.onError(^(NSError *err) {
NSLog(@"%@", err);
});
// update
[RTDB sharedInstance]
.onSync
.onQueue(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0))
.onUpdate(obj)
.onError(^(NSError *err) {
NSLog(@"%@", err);
});
// delete
[RTDB sharedInstance]
.onSync
.onDefault
.onDelete(obj)
.onError(^(NSError *err) {
NSLog(@"%@", err);
});
// select
[RTDBDefault sharedInstance]
.onSync
.onDefault
.onFetchDics(@"SELECT * FROM DB order by _id", ^(NSArray <NSDictionary *>* result) {
for (NSDictionary *dic in result) {
NSLog(@"%@", dic);
}
})
.onError(^(NSError *err) {
NSLog(@"%@", err);
});
[RTDBDefault sharedInstance]
.onSync
.onDefault
.onFetchObjs(@"", ^(NSArray <DB *>*result) {
for (DB *obj in result) {
NSLog(@"%@", obj);
}
})
.onError(^(NSError *err) {
NSLog(@"%@", err);
});
[RTDB sharedInstance]
.onSync
.execArgs(@"SELECT * FROM DB")
.onStep(^(RTNext *next) {
int count = [next columnCountOfRow];
while ([next step]) {
for (int i = 0; i < count; i++) {
NSString *name = [next nameForColumn:i];
id value = [next valueForColumn:i];
NSLog(@"name: %@, value = %@", name, value);
}
}
})
.onError(^(NSError *err) {
NSLog(@"%@", err)
});
Thread safe
- While using RTDB or RTDBDefault without .onSync, thread is not safe.
- Methods of RTSync or RTSyncRun operate db are thread safe.
- RTSync use dispatch_semaphore_t to control concurrency.
See more
Author
Licenses
All source code is licensed under the MIT License.