fmdb(FMDatabase) 数据库总结

原创 2013年12月02日 21:58:20

       这段时间公司在做一个新的应用,用到了数据库。在网上找了一些资料,最后决定用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];

}



  

FMDatabase一些基本操作

由于FMDB是建立在SQLite的之上的,所以你至少也该把这篇文章从头到尾读一遍。与此同时,把SQLite的文档页 http://www.sqlite.org/docs.html 加到你的书签中。自动...
  • liuzhihui666
  • liuzhihui666
  • 2017年03月18日 10:41
  • 383

使用FMDB事务批量更新数据库速度问题

通常一次 sqlite3_exec 就是一次事务,假如你要对数据库中的Stutent表插入新数据,那么该事务的具体过程是:开始新事物->插入数据->提交事务,那么当我们要往该表内插入500条数据,如果...
  • x32sky
  • x32sky
  • 2014年02月07日 16:42
  • 6734

IOS第三方数据库FMDatabase的简单使用

1,拿到数据库文件的路径 self.path = NSHomeDirectory(); self.path = [path stringByAppendingPathComponent:@"Docum...
  • yujian_bing
  • yujian_bing
  • 2013年05月22日 10:14
  • 18509

数据持久化存储:FMDB的使用

FMDB简介:一种第三方开源库,其实就是对SQLite的API进行了封装,在加上面向对象的思想,就不必再用繁琐的C语言API函数了,这要比直接使用SQLite更加的方便。 FMDB优点:使用起来更加...
  • hd_feng
  • hd_feng
  • 2016年12月21日 10:39
  • 750

FMDB的基本使用和解析(Swift3.0)

FMDB FMDB是iOS平台的SQLite数据库框架,FMDB以OC的方式封装了SQLite的C语言API FMDB的优点 使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码提供了多线程...
  • longshihua
  • longshihua
  • 2016年10月28日 16:08
  • 4070

sqlite数据库的基本操作基于FMDatabase(创建数据库,创建表,对标进行增,删,改,查)

要使用FMDatabase进行数据库的操作,我们先得导入FMDatabase这个封装好的包(下载地址:https://github.com/ccgus/fmdb) 然后在要执行数据库操作的文件中引入...
  • u013857988
  • u013857988
  • 2015年01月16日 11:03
  • 469

FMDB的使用,如何利用FMDatabaseQueue保证线程安全

原文地址1:http://www.w2bc.com/Article/18028 原文地址2:http://blog.csdn.net/xyz_lmn/article/details/9312837F...
  • qq_29892943
  • qq_29892943
  • 2016年01月14日 16:47
  • 2857

数据库框架FMDB的使用

这里贴出FMDB的Github地址使用CocoaPods安装:pod 'FMDB' # pod 'FMDB/FTS' # FMDB with FTS # pod 'FMDB/standalone'...
  • weichuang_1
  • weichuang_1
  • 2015年10月12日 00:06
  • 334

FMDatabase介绍使用

本人以后都会不定时的写一些关于IOS开发的教程,大家希望可提些意见,大家希望写些什么,对大家有帮助的,希望帮到大家: FMDatabase其实是一个很轻级的sqlite数据库封装库,用Object-...
  • u012460084
  • u012460084
  • 2014年07月05日 10:40
  • 2271

FMDB常用的数据类型以及sql语句

SQLite数据库的基本数据类型: 整数数据类型: (1)integer :整形数据,大小为4个字节 (2)bigint : 整形数据,大小为8个字节 (3)smallint:...
  • ciwei_numberOne
  • ciwei_numberOne
  • 2015年05月18日 17:17
  • 4071
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:fmdb(FMDatabase) 数据库总结
举报原因:
原因补充:

(最多只允许输入30个字)