文档章节

FMDB使用

阿元
 阿元
发布于 2016/05/17 15:17
字数 943
阅读 63
收藏 0
点赞 2
评论 0

用户信息类:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

//用户数据信息
@interface UserInfo : NSObject
//用户名
@property (retain,nonatomic) NSString* mName ;
//用户ID
@property (retain,nonatomic) NSString* mUserID ;
//年龄
@property (assign,nonatomic) int mAge ;
//邮件
@property (retain,nonatomic) NSString* mEMail ;
//用户头像图像文件
@property (retain,nonatomic) UIImage* mImage ;

@end

#import "UserInfo.h"

@implementation UserInfo

@end

数据库管理类:

#import <Foundation/Foundation.h>
#import "UserInfo.h"
//数据库管理类
@interface FMDBMgr : NSObject
{
    //数据数组
    NSMutableArray* _arrayUsers ;
}
//打开数据库文件
-(BOOL) openFMDB ;
//将数组写入到数据库中
-(void) saveFMDB ;

//插入一条数据到数据库
-(BOOL) insertUserToDB:(UserInfo*) user ;

//插入数据到内存中
-(void) insertUser:(UserInfo*) user ;

//从数据库中删除
-(BOOL) deleteUserFromDB:(UserInfo*) user ;

//从数据内存中删除
-(void) deleteUser:(UserInfo*) user ;

//更新用户数据
-(BOOL) updateInDB:(UserInfo*) user ;

//更新数组中的数据
-(BOOL) updateUser:(UserInfo*) user ;

//返回数据库中的所有用户数据
-(NSArray*) selectAllFromDB ;
//返回内存数组中的数据
-(NSArray*) getAllUsers ;

@end

#import "FMDBMgr.h"
#import "FMDatabase.h"
/*
 对于FMDB目录中的这三个文件做下功能描述:
 FMDatabase : 创建SQLite数据库
 FMResultSet :获取执行sql查询后的结果集
 FMDatabaseQueue :在多个线程执行查询和更新时会使用这个类。
 
 */
@implementation FMDBMgr

-(id) init
{
    self = [super init] ;
    if (self) {
        _arrayUsers = [[NSMutableArray alloc] init] ;
    }
    return self ;
}
// 打开数据库
-(BOOL) openFMDB
{
    NSString* strPath = [NSHomeDirectory() stringByAppendingString:@"/tmp/FMDB.db"];
    //只要数据库的路径地址相同
    //fmdb操作的是同一个数据库
    FMDatabase* fmdb = [[FMDatabase alloc] initWithPath:strPath] ;
    
    NSString* strCreate = @"create table if not exists UserTB(ID integer primary key autoincrement,Name varchar(128),UserID varchar(128),Age smallint,imagePath varchar(1024));";
    
    BOOL isOpen = [fmdb open] ;
//    [fmdb close];
    BOOL isCreate =  [fmdb executeUpdate:strCreate] ;
    //是否创建成功
    return isCreate;
}

-(void) insertUser:(UserInfo *)user
{
    //添加时,有可能添加多个相同的元素
    [_arrayUsers addObject:user] ;
}

-(void) deleteUser:(UserInfo *)user
{
    //[_arrayUsers removeObject:user] ;
    
    for (int i = 0 ; i < _arrayUsers.count; i++)
    {
        UserInfo* u = _arrayUsers[i] ;
        if ([u.mUserID isEqualToString:user.mUserID])
        {
            [_arrayUsers removeObjectAtIndex:i] ;
        }
    }
}
//更新数据
-(BOOL) updateUser:(UserInfo *)user
{
    BOOL isUpdate = NO ;
    for (int i = 0 ; i < _arrayUsers.count; i++)
    {
        UserInfo* u = _arrayUsers[i] ;
        if ([u.mUserID isEqualToString:user.mUserID])
        {
            isUpdate = YES ;
            
            [_arrayUsers replaceObjectAtIndex:i withObject:user] ;
        }
    }
    return isUpdate ;
}



//插入到数据库
-(BOOL) insertUserToDB:(UserInfo *)user
{
    BOOL isInsert = NO ;
    
    NSString* strPath = [NSHomeDirectory() stringByAppendingString:@"/tmp/FMDB.db"];
    //只要数据库的路径地址相同
    //fmdb操作的是同一个数据库
    FMDatabase* fmdb = [[FMDatabase alloc] initWithPath:strPath] ;
    
    [fmdb open] ;
    
    //先要查询数据库中是否有相同 userID的用户
    NSString* strQuery = @"select * from UserTB where UserID = ?;";
    
    FMResultSet* set = [fmdb executeQuery:strQuery,user.mUserID] ;
    
    //如果第一条数据没有结果
    //没有任何数据
    if ([set next] == NO)
    {
        NSString* strInsert = @"insert into UserTB(Name,UserID,Age,ImagePath)"
        " Values(?,?,?,?);" ;
        
//        user.mImage ;
        
        //将JPG格式的图片转化为NSData二进制格式
        //参数一:image对象指针,内存格式要求为JPG
        //参数二:将JPG格式转化为文件时的压缩比例
        //比例范围0~1,值越小,压缩比越大,文件越小,质量越低
        //值越大,压缩比越低,文件越大,质量越高
        
        //返回值时转化过的数据文件
        //如果格式不正确:返回值为nil
        NSData* iData = UIImageJPEGRepresentation(user.mImage, 1) ;
        
        if (iData == nil)
        {
            //使用png格式转化
            //png无压缩格式
            iData = UIImagePNGRepresentation(user.mImage) ;
            
            if (iData == nil)
            {
                NSLog(@"图像有误!");
                
                return NO ;
            }
        }
        
        //获得数据库中最后一条行数据的ID
        NSInteger lastCount = [fmdb lastInsertRowId] ;
        
        lastCount++ ;
        
        static int count = 0 ;
        count++ ;
        
        NSString* imagePath = [NSString stringWithFormat:@"%@/%@/image_%d.pic",NSHomeDirectory(),@"tmp",count] ;
        
      //  user.mImage ;
        
      //  NSLog(@"ipath = %@",imagePath) ;
        
        //写入到文件中
        BOOL isWrite = [iData writeToFile:imagePath atomically:YES] ;
        
        if (isWrite == NO) {
            NSLog(@"写入图片失败!");
        }
        
        //执行插入操作
        isInsert = [fmdb executeUpdate:strInsert,user.mName,
                    user.mUserID,
                    [NSNumber numberWithInt:user.mAge],imagePath] ;
        
        //isInsert = YES ;
    }
    
    return isInsert ;
}


@end

使用:

#import "ViewController.h"
#import "FMDBMgr.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    FMDBMgr* mgr = [[FMDBMgr alloc] init] ;
    
    [mgr openFMDB] ;
    
    static int count = 1 ;
    
    UserInfo* uInfo = [[UserInfo alloc] init] ;
    uInfo.mAge = 20+count ;
    uInfo.mName = [NSString stringWithFormat:@"name %d",count] ;
    uInfo.mEMail =@"12345555@qq.com" ;
    uInfo.mUserID = [NSString stringWithFormat:@"%d",count] ;
    
    NSString* iName = [NSString stringWithFormat:@"17_%d.jpg",count%15+1] ;
    
    uInfo.mImage = [UIImage imageNamed:iName] ;
    
    count++ ;
    
    BOOL isOK = [mgr insertUserToDB:uInfo] ;
    NSLog(@"OK = %d",isOK) ;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

参考文章:http://techblog.youdao.com/?p=1023

© 著作权归作者所有

共有 人打赏支持
阿元
粉丝 5
博文 153
码字总数 95996
作品 0
浦东
程序员
转自:http://blog.devtang.com/blog/2012/04/22/use-fmd

1234567891011 可以看到,使用FMDB后的数据库代码清晰明了,比原生的API优雅多了。另外,FMDB同时兼容ARC和非ARC工程,会自动根据工程配置来调整相关的内存管理代码。 使用说明 该使用说明主...

W浪琴B ⋅ 2016/05/25 ⋅ 0

FMDB:中的用法介绍

FMDB:我的SQLite救星 好滴~离上次发文又给他隔了三个月,为什么咧??因为林杯我很忙,这三个月我跑去订婚、结婚、归宁外加峇里岛蜜月,所以部落格就这么给他放着了。以为这里不会再更新的...

悠哉悠哉e ⋅ 2012/11/27 ⋅ 1

iOS FMDB 刚刚好

A、通过Pod安装FMDB 下面是FMDB的github地址: https://github.com/ccgus/fmdb B、使用FMDB 1、指定路径和sqlite文件名 这里将User.sqlite文件放在缓存目录中,通过下面的方法就得到了数据库...

魔笛GNR ⋅ 2016/08/13 ⋅ 0

数据库操作(FMDB)

iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便。于是,就出现了一系列将SQLite API进行封装的库,例如FMDB、PlausibleDatabase、sqlitepersistentobjects等,FMDB (https:/...

Snaiper ⋅ 2016/01/28 ⋅ 0

iPhone开发进阶(9)--- 用SQLite管理数据库

博主:易飞扬 原文链接 : http://www.yifeiyang.net/iphone-developer-advanced-9-management-database-using-sqlite/ 转载请保留上面文字。 iPhone开发进阶(9)--- 用SQLite管理数据库 今天...

Liuxz-aaa ⋅ 2011/10/09 ⋅ 0

iOS开发数据库篇—FMDB简单介绍

iOS开发数据库篇—FMDB简单介绍 一、简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦、冗...

托楚齐坎基基 ⋅ 2015/12/30 ⋅ 0

iOS开发之FMDB入门学习心得(Swift版)

iOS开发之FMDB入门学习心得(Swift版) 一些废话 最近学习了一下iOS的第三方封装的sqlite数据库fmdb,于是把学习的心得进行了整理。内容只是涉及一些简单的操作:增,删,改,查。 与其说是一...

法斗斗 ⋅ 2016/08/10 ⋅ 0

iOS - 数据库 第三方框架FMDB

初识FMDB iOS中原生的 API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦。于是,就出现了一系列将SQLite API进行封装的库,例如、、等。 FMDB是一款简洁、易用的封装库。因此,...

linweida ⋅ 2016/09/20 ⋅ 0

iOS学习笔记(十六)——数据库操作(使用FMDB)

iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便。于是,就出现了一系列将SQLite API进行封装的库,例如FMDB、PlausibleDatabase、sqlitepersistentobjects等,FMDB (https:/...

sea_god ⋅ 2014/08/19 ⋅ 0

sqlite数据库操作类 FMDatabase(object-c)

FMDB下载地址 https://github.com/ccgus/fmdb 用法 : 主要有两个FMDB中的类: FMDatabase代表单个的SQLite数据库。 用于执行SQL语句。 FMResultSet 表示 FMDatabase 执行查询的结果。 数据库...

慎道 ⋅ 2011/12/20 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 59分钟前 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 7

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部