iOS FMDB的使用
简介:
SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库。iOS SDK 很早就支持了 SQLite,在使用时,只需要加入 libsqlite3.dylib 依赖以及引入 sqlite3.h 头文件即可。但是,原生的 SQLite API 在使用上相当不友好,在使用时,非常不便。于是,开源社区中就出现了一系列将 SQLite API 进行封装的库,而 FMDB (https://github.com/ccgus/fmdb) 则是开源社区中的优秀者。
使用: (BESTAccountsManager 为账号数据管理分类, BESTAccountItem 为账号模型)
static FMDatabase *_db;
static BESTAccountsManager *sharedManager = nil;
// 单例
+ (instancetype)sharedManager {
@synchronized (self) {
if (sharedManager == nil) {
sharedManager = [[BESTAccountsManager alloc] init];
}
}
return sharedManager;
}
// 打开数据库
- (void)openAccountManager {
// 判断 caches 文件夹是否存在.不存在则创建
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSFileManager *manager = [NSFileManager defaultManager];
BOOL tag = [manager fileExistsAtPath:path isDirectory:NULL];
if (!tag) {
[manager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:NULL];
}
NSString *pathString = [path stringByAppendingPathComponent:@"AccountManager.db"];
NSLog(@"account_path - %@", pathString);
_db = [FMDatabase databaseWithPath:pathString];
if ([_db open]) {
BOOL res = [[BESTAccountsManager sharedManager] createTable];
if (!res) {
NSLog(@"create table Accounts failed!");
}
}
}
// 创建数据库
- (BOOL)createTable {
NSString *sql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS 'Account'('id' PRIMARY KEY AUTOINCREMENT NOT NULL, 'UserName' TEXT NOT NULL, 'Password' TEXT NOT NULL, 'Host' TEXT NOT NULL)"];
return [_db executeUpdate:sql];
}
// 增
- (void)insertAccountItem:(BESTAccountItem *)item {
if ([_db open]) {
NSString *sql = [NSString stringWithFormat:@"INSERT INTO 'Account' ('UserName', 'Password', 'Host') VALUES ('%@', '%@', '%@')", item.userName, item.password, item.host];
BOOL res = [_db executeUpdate:sql];
if (res) {
NSLog(@"insert account item succeed!");
} else {
NSLog(@"insert account item failed!");
}
}
[_db close];
}
// 删
- (void)deleteAccountItem:(BESTAccountItem *)item {
if ([_db open]) {
NSString *sql = [NSString stringWithFormat:@"DELETE FROM 'Account' WHERE 'UserName' = '%@' AND 'Host' = '%@'", item.userName, item.host];
BOOL res = [_db executeUpdate:sql];
if (res) {
NSLog(@"delete account item succeed!");
} else {
NSLog(@"delete account item failed!");
}
}
[_db close];
}
// 改
- (void)updataAccountItem:(BESTAccountItem *)item {
if ([_db open]) {
NSString *sql = [NSString stringWithFormat:@"UPDATE 'Account' SET 'Password' = '%@' WHERE 'UserName' = '%@' AND 'Host' = '%@'", item.password, item.userName, item.host];
BOOL res = [_db executeUpdate:sql];
if (res) {
NSLog(@"update account item succeed!");
} else {
NSLog(@"update account item failed!");
}
}
[_db close];
}
// 查
- (NSArray *)queryAccountItems {
NSMutableArray *accounts = [NSMutableArray array];
if ([_db open]) {
NSString *sql = [NSString stringWithFormat:@"SELECT * FROM 'Account'"];
FMResultSet *set = [_db executeQuery:sql];
while ([set next]) {
BESTAccountItem *item = [[BESTAccountItem alloc] init];
item.userName = [set stringForColumn:@"UserName"];
item.password = [set stringForColumn:@"Password"];
item.host = [set stringForColumn:@"Host"];
[accounts addObject:item];
}
}
[_db close];
return accounts;
}
iOS FMDB的使用的更多相关文章
- iOS FMDB的使用(增,删,改,查,sqlite存取图片)
iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...
- IOS FMDB 获取数据库表和表中的数据
ios开发中,经常会用到数据库sqlite的知识,除了增,删,改,查之外,我们说说如何获取数据库中有多少表和表相关的内容. 前言 跟数据库使用相关的一般的增删改查的语句,这里就不做解释了.在网上有很多 ...
- iOS FMDB 不需要关闭
以前做了一个应用,里面用到了FMDB,进行每一次操作前,都open,完成操作后都close.因为我是参考他们以前的代码.程序初期没发现什么问题,程序完成后,各种卡顿就出现了!即使我是放在新线程里操作的 ...
- iOS FMDB
FMDB FMDB概述 什么是FMDB * FMDB是iOS平台的SQLite数据库框架 * FMDB以OC的方式封装了SQLite的C语言API FMDB的优点 * 使用起来更加面向对象,省去了很多 ...
- iOS | FMDB快速上手
任何的开发都或多或少的接触到数据库,而在IOS中一般使用的是SQLite数据库,这是一个轻量功能较为不错的数据库.而现在用到比较多的第三方数据库操作框架就是FMDB.废话不多说,相信查找到这篇文章的都 ...
- iOS FMDB小试了一下
今天从早上9点,一直在看FMDB,知道中午11:40.我的效率是不是很低下.中间也碰到了几个小bug. 虽然做了一个小demo,但是觉得还比不上在项目中使用中锻炼的多,先暂且一总结. 先下载FMDB的 ...
- iOS FMDB官方使用文档 G-C-D的使用 提高性能(翻译)(转)
由于FMDB是建立在SQLite的之上的,所以你至少也该把这篇文章从头到尾读一遍.与此同时,把SQLite的文档页 http://www.sqlite.org/docs.html 加到你的书签中.自动 ...
- IOS FMDB模糊查询
http://blog.sina.com.cn/s/blog_9630f1310101fx1d.html /查询记录 -(NSArray*)selectitemDream_desc:(JiemengS ...
- iOS FMDB的是使用和注意事项
1.FMDB 默认的使用方法不是线程安全的. 2.Sqlite 默认不支持外键. 3.Sqlite 不支持用 ALTER 关键字给已有表添加外键约束 解决: 1.FMDBDatabaseQueue 2 ...
随机推荐
- WordPress学习
1,WordPress安装 2,WordPress前台与后台 3,WordPress Post&Page. 4,WordPress多媒体 5,WordPress插件管理 上面5条已经掌握,明天 ...
- Characteristics of Some CISCs, RISCs, and Superscalar Processors
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION Although RISC archite ...
- PHP unset 后恢复数组索引
unset($arr[3]); $arr = array_values($arr); array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名,被返回的数组将使用数值键,从 ...
- iOS开发_统计xcode代码行数
如果要统计ios开发代码,包括头文件的,终端命令进入项目目录下,命令如下 find . -name "*.m" -or -name "*.h" -or -nam ...
- libgdx 常见问题
libgdx assets file not found Select Run -> Edit Configurations from the menu In the "Working ...
- php操作Mysql 以及封装常用的函数 用外连接连接3个表的案例
<?php header("content-type;text/html;charset=utf-8"); //数据库连接define('DB_HOST','localhos ...
- 。。。contentType与pageEncoding的区别。。。
今天,开始换了一个新的开发工具IDEA,目前还不熟悉,新建了一个简单的Web项目,用到了Servlet,out.print("大家好!");然后就输出乱码了,用了response. ...
- 大数据导致DataReader.Close超时的异常
公司一个数据抓取的程序,数据量极大,读取数据的用IDataReader的Read方法来进行数据处理,在测试的时候我想跑一部分数据后跳出循环,即break; 然后关闭datareader,但是在执行da ...
- elasticsearch客户端连接选择
elasticsearch支持两种协议: http协议. Native Elasticsearch binary protocol(本地elasticsearch二进制协议):elasticsearc ...
- 【svn】一个设置,少写几个字
以下场景仅适用于修改bug的时候,在提交代码的时候少写几个字,嘿嘿: 1.打开[SVN 属性],在代码目录右键 2.打开BUG跟踪设置窗口 3.输入BUG的URL前缀以及%BUGID%,如 复选框,建 ...