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添加许多崭新的功能:不论是数据同步,社交分享,还是云端存储 ...
随机推荐
- Sublime Text3 解决中文乱码 & 可用注册码 & 设置默认打开方式
Sublime Text3注册码 Sublime Text Build 3065 License key 复制如下三个任意一个正版注册码即可 -– BEGIN LICENSE -– Andrew We ...
- 【UVA 1636】 (条件概率)
题链:https://cn.vjudge.net/problem/UVA-1636 题意 给出一把枪的子弹序列,已知开了一枪且无子弹,问下一步的决策是旋转,还是开下一枪 题解 已知开一枪没子弹,下一枪 ...
- Ducci Sequence解题报告
A Ducci sequence is a sequence of n-tuples of integers. Given an n-tuple of integers (a1, a2, ... , ...
- 深刻理解下js的prototype
参考 http://aralejs.org/class/docs/competitors.html, http://www.iteye.com/topic/248933,http://www.cnbl ...
- python接口自动化-multipart/form-data上传图片
前言 在提交表单操作的时候,经常会遇到图片上传的操作,图片上传是一个单独的接口,本篇以禅道为例,介绍如何上传图片 上传接口 1.以禅道上提交bug为例,在选择图片时,点确定按钮,就是上传图片了 2.用 ...
- POJ-2590-Steps题目详解,思路分析及代码,规律题,重要的是找到规律~~
Steps Time Limit: 1000MS Memory Limit: 65536K http://poj.org/problem?id=2590 Description One ...
- irules事件和命令
- 【多校训练2】HDU 6047 Maximum Sequence
http://acm.hdu.edu.cn/showproblem.php?pid=6047 [题意] 给定两个长度为n的序列a和b,现在要通过一定的规则找到可行的a_n+1.....a_2n,求su ...
- [NOIP2002] 提高组 洛谷P1034 矩形覆盖
题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...
- C++内存分配方式——(别人的博客)
http://www.cnblogs.com/easonpan/archive/2012/04/26/2471153.html http://blog.csdn.net/chen825919148/a ...