FMDB的一些特别使用
来源:互联网 发布:安卓输入法开发源码 编辑:程序博客网 时间:2024/04/30 01:36
1.使用FMDB类获取数据记录集合Count的方法
很多时候,我们在查询一个表的时候,不想得到里面的记录内容,只是想简单的得到符合查询条件的记录条数。FMDB中有一个很简单的方法就可以实现,见下面的代码实例。
#import "FMDB.h"#import "FMDatabaseAdditions.h"//一定要记着引入上面这个头文件哦//初始化FMDatabase对象的部分省略…… [db open]; NSUInteger count = [db intForQuery:@"select count(*) from LoginUser"]; [db close];
恩,就这样,一句搞定。
2.数据库文件加密
pod file文件里设置
pod 'FMDB/SQLCipher','~> 2.6.2'
FMDB使用的版本是2.6.2(目前最新版),SQLCipher是3.1.0版本(支持ios7的,以上的版本就是需要支持ios8的了)
FMEncryptDatabaseQueue通过继承FMDatabaseQueue类,拿到FMDatabase *_db对象,去调用setKey方法即可,见代码如下:
#import <FMDB/FMDB.h>@interface FMEncryptDatabaseQueue :FMDatabaseQueue/** * 设置数据库加密key * * @param key 加密key * * @return 加密是否成功 */- (BOOL)setKey:(NSString*)key;@end
#import "FMEncryptDatabaseQueue.h"@implementation FMEncryptDatabaseQueue- (BOOL)setKey:(NSString*)key{ return [_dbsetKey:key];}@endself.queue = [[FMEncryptDatabaseQueuealloc] initWithPath:DataBaseName];[self.queuesetKey:@"DBPasswordKey"];//设置数据库加密key
另外,打开加密数据库文件要用至少4.3.5版本的SQLiteManager,低版本的不知为何打不开。
还有另一种方式加密,就是直接使用SQLCipher
pod 'SQLCipher','~> 3.1.0’
SQLCipher的3.4.0, 3.3.1两个版本是需要支持ios8的,前面也说了。
SQLCipher里包含sqlite3.h和sqlite3.c这两个源文件(这个第三方库里就只有这两个文件),加密方式主要就是sqlite3.c文件里的sqlite3_key函数的调用。
代码如下:
NSString *databasePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)objectAtIndex:0] stringByAppendingPathComponent:@"cipher.db"]; NSLog(@"数据库地址:%@",databasePath); sqlite3 *db; if (sqlite3_open([databasePathUTF8String], &db) == SQLITE_OK) { const char* key = [@"abc123"UTF8String]; sqlite3_key(db, key, (int)strlen(key));//数据库加密 int result = sqlite3_exec(db, (constchar*) "SELECT count(*) FROM sqlite_master;",NULL, NULL,NULL); if (result == SQLITE_OK) { NSLog(@"password is correct, or, database has been initialized"); [self initTablePerson:db]; [self insert:db]; [self query:db]; } else { NSLog(@"incorrect password! errCode:%d",result); } sqlite3_close(db); }
3.如果一个数据库事务里有两个查询操作,会导致后一个查询结果集出错,原因未知
代码如下:
__block NSMutableArray *array = nil; [self.queue inTransaction:^(FMDatabase *db,BOOL *rollback) { NSString *searchSQL = @"select count(*) from table"; int count = [db intForQuery:searchSQL]; FMResultSet *resultSet = [db executeQuery:sql]; array = [[NSMutableArray alloc] init]; if (count >0) { do { Model *model = [[Model alloc] init]; NSArray *allProperties = [[Reflection sharedReflection] classPropertiesArray:[Model class]]; for (NSString *keyin allProperties) { NSString *columnValue = [resultSet stringForColumn:key]; [pluginListItem setValue:columnValue forKey:key]; } [array addObject:model]; } while ([resultSet next]); } [resultSet close]; }];
上述代码for循环里的columnValue的值会为空。
0 0
- FMDB的一些特别使用
- UITextField 日常使用一些特别的地方
- 关于FMDB的一些用法
- FMDB的使用
- FMDB库的使用
- FMDB的使用
- FMDB的使用
- FMDB的使用
- FMDB的使用
- FMDB库的使用
- sqlite3 FMDB的使用
- FMDB的使用
- iOS FMDB的使用
- FMDB的基本使用
- FMDB的使用
- FMDB的使用
- FMDB的使用
- FMDB的简单使用
- [leetcode]240. Search a 2D Matrix II
- Gson JsonString to Map
- 【51Nod】1101 - 换零钱(完全背包)
- java IO流之一 IO流介绍
- 一个简单的哈希表实现
- FMDB的一些特别使用
- 一个laravel文件中创建多个应用
- 内核与驱动文件的version magic匹配问题
- SVN
- Centos 环境搭建之Maven私服nexus
- 【JEECG dubbo专题】Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- EventBus使用详解
- laraval的分页
- install Composer fail from xampp in windows