开源第三方地址:
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 其他