iOS开发——高级篇——FMDB 数据库简单使用
#import <Foundation/Foundation.h> @interface UserDB : NSObject // 把userDB设计成一个单例类
+ (id)shareInstance; // 创建用户表
- (void)createTable; // 添加用户
- (void)addData:(NSArray *)dataArray; // 查询用户
- (NSArray *)findDatas; // 删除一行数据
- (void)deleteRowData:(NSArray *)array; // 清空表中的数据:
- (void)clearTableData; // 更新数据
- (void)executeUpdate:(NSArray *)array; @end
.h文件
#import "UserDB.h"
#import <FMDB.h> #define dataBasePath [[(NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)) lastObject]stringByAppendingPathComponent:dataBaseName]
#define dataBaseName @"GuoBIn.sqlite" // 把userDB设计成一个单例类
static UserDB *instnce; @implementation UserDB // 把userDB设计成一个单例类
+ (id)shareInstance
{
if (instnce == nil) {
instnce = [[[self class] alloc] init];
}
return instnce;
} // 创建用户表
- (void)createTable
{
// 文件路径
NSString *filePath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/%@",dataBaseName];
NSLog(@"文件路径 == %@",filePath); FMDatabase *db = [FMDatabase databaseWithPath:dataBasePath]; if ([db open]) {
if (![db tableExists:@"user"]) {
if ([db executeUpdate:@"CREATE TABLE user (Serial text primary key,dataText text)"]) {
NSLog(@"创建表成功");
}else{
NSLog(@"创建表失败");
}
} else {
NSLog(@"表已经存在");
}
} else{
NSLog(@"打开表失败");
}
[db close]; } // 添加用户
- (void)addData:(NSArray *)dataArray
{
NSString *serial = [dataArray objectAtIndex:];
NSString *dataText = [dataArray objectAtIndex:]; FMDatabase *db = [FMDatabase databaseWithPath:dataBasePath];
if ([db open]) {
// 插入数据
[db executeUpdate:@"insert into user (Serial,DataText) values(?,?)",serial,dataText,nil];
}
[db close];
} // 查询用户
- (NSArray *)findDatas
{
NSMutableArray *users = [NSMutableArray array];
FMDatabase *db = [FMDatabase databaseWithPath:dataBasePath];
if ([db open]) {
// 获取所有数据
FMResultSet *rs = [db executeQuery:@"SELECT * FROM user"];
while ([rs next]) {
NSString *serial = [rs stringForColumn:@"Serial"];
NSString *dataText = [rs stringForColumn:@"DataText"]; [users addObject:@[serial,dataText]];
}
[rs close];
}
[db close];
return users;
} - (void)deleteRowData:(NSArray *)array
{
NSString *serial = [array objectAtIndex:];
NSString *dataText = [array objectAtIndex:]; FMDatabase *db = [FMDatabase databaseWithPath:dataBasePath];
if ([db open]) {
// 删除某个数据
BOOL rs = [db executeUpdate:@"DELETE FROM user WHERE Serial = ? and DataText = ?",serial,dataText]; if (rs) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
}
}
[db close];
} // 清空表中的数据:
- (void)clearTableData
{
FMDatabase *db = [FMDatabase databaseWithPath:dataBasePath];
if ([db open]) {
// 清除全部数据
[db executeUpdate:@"DELETE FROM user"];
}
[db close];
} // 更新数据
- (void)executeUpdate:(NSArray *)array
{
NSString *serial = [array objectAtIndex:];
NSString *dataText = [array objectAtIndex:]; FMDatabase *db = [FMDatabase databaseWithPath:dataBasePath];
if ([db open]) {
[db executeUpdate:@"UPDATE user SET DataText = ? WHERE Serial = ?",dataText,serial];
}
[db close]; } @end
.m文件
iOS开发——高级篇——FMDB 数据库简单使用的更多相关文章
- iOS开发UI篇—xib的简单使用
iOS开发UI篇—xib的简单使用 一.简单介绍 xib和storyboard的比较,一个轻量级一个重量级. 共同点: 都用来描述软件界面 都用Interface Builder工具来编辑 不同点: ...
- iOS开发多线程篇 09 —NSOperation简单介绍
iOS开发多线程篇—NSOperation简单介绍 一.NSOperation简介 1.简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现 ...
- iOS开发——高级篇——iOS开发之网络安全密码学
一.非对称加密 - RSA : + 公钥加密,私钥解密: + 私钥加密,公钥解密: + 只能通过因式分解来破解 二.对称加密 - DES - 3DES - AES (高级密码标准,美国国家安全局使用, ...
- iOS开发——高级篇——地理定位 CoreLocation
一.CoreLocation 在移动互联网时代,移动app能解决用户的很多生活琐事,比如周边:找餐馆.找KTV.找电影院等等导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达 在上述应用 ...
- iOS开发——高级篇——线程同步、线程依赖、线程组
前言 对于iOS开发中的网络请求模块,AFNet的使用应该是最熟悉不过了,但你是否把握了网络请求正确的完成时机?本篇文章涉及线程同步.线程依赖.线程组等专用名词的含义,若对上述名词认识模糊,可先进行查 ...
- iOS开发——高级篇——iPad开发、iPad开发中的modal
一.iPad简介 1.什么是iPad一款苹果公司于2010年发布的平板电脑定位介于苹果的智能手机iPhone和笔记本电脑产品之间跟iPhone一样,搭载的是iOS操作系统 2.iPhone和iPadi ...
- iOS开发——高级篇——地图 MapKit
一.简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如周边:找餐馆.找KTV.找电影院等等导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达 在上述应用中,都用到了定位 ...
- iOS开发——高级篇——iOS 项目的目录结构
最近闲来无事去面试一下iOS开发,让我感到吃惊的,面试官竟然问怎么分目录结构,还具体问每个子目录的文件名. 目录结构确实非常重要,面试官这么问,无疑是想窥探开发经验.清晰的目录结构,可让人一眼明白相应 ...
- iOS开发——高级篇——Parse 教程:网络后台基础
本教程已针对Swift, iOS 8.3, Xcode 6.3及最新的Parse SDK(1.7.1版本)更新. 网络后台支持可以为你的App添加许多崭新的功能:不论是数据同步,社交分享,还是云端存储 ...
随机推荐
- 如何用纯 CSS 创作一种有削铁如泥感觉的菜单导航特效
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/XqYroe 可交互视频教 ...
- python对象销毁(垃圾回收)
Python 使用了引用计数这一简单技术来跟踪和回收垃圾. 在 Python 内部记录着所有使用中的对象各有多少引用. 一个内部跟踪变量,称为一个引用计数器. 当对象被创建时, 就创建了一个引用计数, ...
- asp网页无法打开
环境:Window 2003.IIS6.Framework1.1 .VS2003 一个WebForm项目里面包含一些asp网页 运行后发现asp页面无法访问 提示:无法找到该页 解决方案: 1. [ ...
- CI 安装时目录的安全处理
如果你想通过隐藏 CodeIgniter 的文件位置来增加安全性,你可以将 system 和 application 目录修改为其他的名字,然后打开主目录下的 index.php 文件将 $syste ...
- zoj 2857 Image Transformation
Image Transformation Time Limit: 2 Seconds Memory Limit: 65536 KB The image stored on a compute ...
- POJ-1088滑雪,典型的动态规划题,与NYOJ-10skiing一样,但NYOJ上时限是3s,用搜索可以过,但在POJ上就超时了~~
滑雪 Time Limit: 1000MS Memory Limit: 65536k ...
- [NOIP1998] 普及组
三连击 题目描述 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数. 输入输出格式 输入格式: 木有输入 输出格式: 若干行, ...
- [Bzoj1083][SCOI2005]互不侵犯king(状压dp)
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4595 Solved: 2664[Submit][ ...
- 使用Spring Data Redis操作Redis(集群版)
说明:请注意Spring Data Redis的版本以及Spring的版本!最新版本的Spring Data Redis已经去除Jedis的依赖包,需要自行引入,这个是个坑点.并且会与一些低版本的Sp ...
- CSS布局之BFC和IFC
本文为原创,转载请注明出处: cnzt 文章:cnzt-p http://www.cnblogs.com/zt-blog/p/6708358.html <这是一篇css2-3的布局规 ...