这段时间公司在做一个新的应用,用到了数据库。在网上找了一些资料,最后决定用fmdb来做。主要是用起来比较简单,适合刚接触数据库这方面的人。

一、步  首先是创建数据库:

+(NSString*)filePath:(NSString *)fileName
{
   
    NSString *path=NSHomeDirectory();
    
 
    //拼接路径Library/Caches
    path=[path stringByAppendingPathComponent:@"Library/Caches"];
    NSLog(@"path=%@",path);
    NSFileManager *fm=[NSFileManager defaultManager];
    //检查指定的缓存目录是否存在
    if ([fm fileExistsAtPath:path]) {
        //检查要保存的文件名是否合法
        if (fileName&& [fileName length]!=0) {
            //拼接全路径
            path=[path stringByAppendingPathComponent:fileName];
        }
    }
    else{
        NSLog(@"缓存目录不存在");
    }
    return path;
}

-(id)init
{
    
    DataItem *item = [[DataItem alloc] init];
    NSLog(@"090909090==%@",item.destination);
    if (self=[super init]) {
        //实例化第三方数据库操作类对象
        //如果user.db文件不存在就创建新的
        //存在就直接使用
        fmdb=[[FMDatabase databaseWithPath:[Database filePath:@"user.db"]] retain];
        //尝试打开数据库
        if ([fmdb open]) {
            //创建数据表
            [self createTable];
        }
    }
    return self;
}

二、  创建数据库表   需要建多个表所以用一个数组来保存建表语句,然后遍历数组执行建表语句

NSArray *reportinfoArray = [NSArray arrayWithObjects:@"CREATE TABLE IF NOT EXISTS report_info (report_id integer Primary Key Autoincrement,report_name Varchar(1024) DEFAULT NULL,user_id integer DEFAULT NULL“,nil];

以report_id为自增长的主建  在建表语句中将其声明为主建,在表的插入过程中 repord_id回从1开始自动增长不需要对其进行赋值。

for (NSString *sql in reportinfoArray) {
        //执行sql语句
        //创建表,增,删,改都用这个方法
        if ([fmdb executeUpdate:sql]) {
            NSLog(@"已创建");
            
        }
        else{
            NSLog(@"创建表失败:%@",[fmdb lastErrorMessage]);;
        }
    }

三,插入  可一条一条插入也可批量插入

-(void)insertItem:(DataItem *)item
{
    if ([self existsItem:item]) {
        return;
    }else{
        
        
        NSString *sql=[NSString stringWithFormat:@"insert into report_info           (report_name,user_id,any_invoice,allowance,advance_payment,report_aim,report_starttime,report_endtime,destination) values (?,?,?,?,?,?,?,?,?)"];
        //变参方法,每个?号代表一个字段值,所有参数必须为对象类类型
        if (sql) {
            [fmdb executeUpdate:sql,item.report_name,item.user_id,item.any_invoice,item.allowance,item.advance_payment,item.report_aim,item.report_starttime,item.report_endtime,item.destination];
        //获取最后一个插入的数据的主键
            markID = [fmdb lastInsertRowId];
        }
        else{
            NSLog(@"插入失败 :%@",[fmdb lastErrorMessage]);
        }
        
        
    }
}
 批量插入
-(void)insertStayArray:(NSArray *)array
{
    //开始批量操作
    [fmdb beginTransaction];
    for (DataItem *item in array) {
        [self insertStayItem:item];
    }
    //提交所有修改
    [fmdb commit];
}

注释:在插入过程中遇到了一个问题 再插入nsinteger 类型的数据的时候 程序会崩溃  后来的解决办法是[NSString stringWithFormat:@"%d",item.report_id] 将其转化为nsstring 类

型在进行插入。

四、删除相对简单 只需要根据其主键后按照某些特定条件进行删除

-(void)deletestay_info:(int)stay_id
{
    NSString*delete=[NSString stringWithFormat:@"DELETE FROM stay_info WHERE stay_id = %d",stay_id];
    BOOL a=[fmdb executeUpdate:delete];
    if (a) {
        NSLog(@"%d,删除成功!",stay_id);
    }
}

五、查找 也是根据某些特定的条件进行查找

-(DataItem*)getStay_info:(int)stay_id
{
    
    NSString *sql=[NSString stringWithFormat:@"select * from stay_info where stay_id=%d",stay_id];
    
    
    //执行查询
    FMResultSet *rs=[fmdb executeQuery:sql];
    //如果有记录
    DataItem *item=[[[DataItem alloc] init] autorelease];
    
    while ([rs next]) {
        //此方法是一组方法
        //根据字段类型选择不同方法
        item.stay_id = [rs longForColumn:@"stay_id"];
        item.stay_endtime = [rs stringForColumn:@"stay_endtime"];
        item.stay_company_pay = [rs stringForColumn:@"stay_company_pay"];
    }
    
    return item;
    
}

六、修改 根据要修改的内容判断满足怎样的条件需要修改

-(void)alerttraffic_info:(DataItem *)item
{
    NSLog(@"traffic_destination = %@",item.traffic_destination);
    
    NSLog(@"traffic_id=%d",item.traffic_id);
    NSString*Name=[NSString stringWithFormat:@"UPDATE traffic_info SET traffic_kind = '%@' WHERE traffic_id = %d",item.traffic_kind,item.traffic_id];
    [fmdb executeUpdate:Name];
    
    NSString*trafficDate=[NSString stringWithFormat:@"UPDATE traffic_info SET traffic_date = '%@' WHERE traffic_id = %d",item.traffic_date,item.traffic_id];
    [fmdb executeUpdate:trafficDate];

}

fmdb(FMDatabase) 数据库总结相关推荐

  1. FMDB(FMDatabase)--SQLite的封装

    为什么80%的码农都做不了架构师?>>>    http://note.sdo.com/u/3413430/NoteContent/d1mS~k158MiwE0c400eTi SQL ...

  2. 使用FMDB进行数据库操作

    FMDB: https://github.com/ccgus/fmdb 按照教程可以通过pods的方式进行依赖引入. 简单的增删改查操作,代码如下: #import "ViewControl ...

  3. FMDB iphone 数据库

    from:http://blog.devtang.com/blog/2012/04/22/use-fmdb/ SQLite (http://www.sqlite.org/docs.html) 是一个轻 ...

  4. FMDB 操作数据库

    操作数据库,之前,统一操作: if (![db open]) {         [db release];         return; } 之后统一操作: [db close]; 1.创建表: ...

  5. Sqlite3数据库之第三方库FMDB学习心得

    很早之前就接触Sqlite数据库,但是之前对数据库操作未使用任何第三方库,只是实现基本的增.删.改.查功能,自己对着一本iPhone开发入门级的书籍写了一个类,基本能实现上述四个功能.最近在开发一个软 ...

  6. 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...

  7. fmdb和mysql的区别_fmdb数据库

    FMDB/SQLCipher数据库加解密,迁移 sqlite应用几乎在所有的App都能看到,虽然我们的数据存储在沙盒里面,一般情况下无法拿到,但是iOS管理软件(如:iFunBox)可以读取到应用程序 ...

  8. iOS - 数据持久化之 FMDB 的使用

    前言 上一篇文章「iOS - 使用 SQLite 数据库实现数据持久化」,介绍了如何使用 sqlite3 操作 SQLite 数据库实现增删改查.但是在代码编写的过程中,我们发现 sqlite3 需要 ...

  9. Swift 3 0 FMDB 初试

    ###1.pod导入FMDB podfile 内容如下: # Uncomment the next line to define a global platform for your project ...

最新文章

  1. hypervisor简介
  2. i java_Java中的i++和i--
  3. 导出滴滴行程单_身穿统一的绿马甲!滴滴货运小哥上线首日即爆单
  4. Flume Sink Processor
  5. 基于JAVA+SpringMVC+MYSQL的学生请假管理系统
  6. 中国太阳能窗户市场趋势报告、技术动态创新及市场预测
  7. ICC_lab总结——ICC_lab3:布局
  8. rbw数字信号处理_基于FPGA的数字中频信号处理的设计与实现
  9. PostgreSQL客户端安装
  10. 【ffmpeg】支持vp8/vp9编码
  11. mac 打开虚拟机之后,原MAC没有声音解决方法
  12. C语言学习笔记(12)——函数基础
  13. 【纸飞机(PaperPlane)IMITATE版】知识点整理
  14. 【精简操作】Mathtype安装出现错误“53”/未找到.wll文件/选项卡灰色等问题
  15. Java 学生管理系统--------13
  16. 一个基本c语言注释用什么字符串,C语言的词法规则京鸿智武 今天提纲:本文主要介绍了C语言中...
  17. stream根据某个字段去重(对象的某个字段去重)
  18. 路由器老掉线的原因之一
  19. Java中使用JCOM操作Word/Excel对象
  20. java鼠标左键点击四溅,重生之我是一只鼠

热门文章

  1. Audio中underrun与overrun问题解决(十八)
  2. 以太网通信(1)UDP —— 数据发送
  3. Java 添加、替换、删除PDF中的图片
  4. JavaScript补齐指定位数
  5. jquery实现图片上传
  6. 高职医学计算机考试科目一模拟试题及答案,医药卫生(临床医学类专业除外)和高职单招对口医学类联考职业技能测试考试大纲...
  7. IFRS9 或中国版IFRS9 会计准则22号的内容和实施概述
  8. 18届大专实习生2020总结
  9. 高通8996启动流程-3. sbl1启动流程
  10. 阿里云Mysql5.7 数据库恢复 qp.xb文件恢复数据