最新消息:文章中包含代码时,请遵守代码高亮规范!

数据存储–FMDB框架【原创】

iOS 黄 艳承 632浏览 0评论

一、FMDB框架介绍

1.什么是FMDB
FMDB是iOS平台的SQLite数据库框架
FMDB以OC的方式封装了SQLite的C语言API

2.FMDB的优点
使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
对比苹果自带的Core Data框架,更加轻量级和灵活
提供了多线程安全的数据库操作方法,有效地防止数据混乱

3.FMDB的github地址
https://github.com/ccgus/fmdb

二、FMDB框架中重要的类

  • FMDatabase
    一个FMDatabase对象就代表一个单独的SQLite数据库
    用来执行SQL语句
  • FMResultSet
    使用FMDatabase执行查询后的结果集
  • FMDatabaseQueue
    用于在多线程中执行多个查询或更新,它是线程安全的

三、FMDB框架使用步骤

(1)下载FMDB文件GitHub,并将FMDB文件夹添加到项目中(也可使用CocoaPods导入)
(2)导入libsqlite3.0框架,导入头文件FMDatabase.h
(3)代码实现,创建数据库路径,获得数据库路径,打开数据库,然后对数据库进行增、删、改、查操作,最后关闭数据库。

数据库创建
  • 创建FMDatabase对象时参数为SQLite数据库文件路径,该路径可以是以下三种方式之一
 FMDatabase *db = [FMDatabasedatabaseWithPath:path];

1、 文件路径。
该文件路径无需真实存在,如果不存在会自动创建
2、空字符串(@“”)。
表示会在临时目录创建一个空的数据库,当FMDatabase连接关闭时,文件也会被删除
3、 NULL。
将创建一个内在数据库,同样的,当FMDatabase连接关闭时,数据将会被销毁

执行更新

在FMDB中,除查询以外的所有操作,都称为“更新”
create、drop、insert、update、delete等
使用executeUpdate:方法执行更新

  • -(BOOL)executeUpdate:(NSString*)sql, …
  • -(BOOL)executeUpdateWithFormat:(NSString*)format, …
  • -(BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments
    示例:
[db executeUpdate:@"UPDATE t_student SET age = ? WHERE name = ?;", @20, @"Jack"]
执行查询

查询方法
— (FMResultSet )executeQuery:(NSString)sql, …

  • -(FMResultSet )executeQueryWithFormat:(NSString)format, …
  • -(FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments

示例

// 查询数据
>FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];
// 遍历结果集
while ([rs next]) {
 NSString *name = [rs stringForColumn:@"name"];
 int age = [rs intForColumn:@"age"];
double score = [rs doubleForColumn:@"score"];

}

四、代码实例

1、倒入fmdb文件,与libsqlite3.0框架。
2、 创建一个模型,命名为student。

@property(nonatomic,copy)NSString *name;
@property(nonatomic,assign)int id;
@property(nonatomic,assign)int age;

3、在ViewController .h中创建一下方法:

-(void)createTable;//创建表
-(FMDatabase *)openTable;//打开数据库

-(void )insert;//插入数据
-(void)del;//删除数据
-(void )updata;//更新数据
-(NSMutableArray  *)queryAll;//查询数据

4、在ViewController .m文件中

  • 自定义打开数据库:
-(FMDatabase *)openTable
{
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    path =[path stringByAppendingPathComponent:@"student.sqlite"];
   NSLog(@"%@",path);
    FMDatabase *db = [FMDatabase databaseWithPath:path];
    [db open];
   BOOL open = [db open];
      if (open) {
           NSLog(@"数据库打开成功");
      }
      else
    {
          NSLog(@"数据库打开失败");
     }
   
    return db;

}

  • 创建表
-(void)createTable{
    FMDatabase *db=[self openTable];
    NSString *sql=@"create table if not exists t_table(id integer primary key autoincrement,name text ,age integer);";
    [db executeUpdate:sql];
    BOOL result=[db executeUpdate:sql];
  if ( result) {
    NSLog(@"创建表成功");
   }
  else
        NSLog(@"创建表失败");
    [db close];
}
  • 插入数据
-(void)insert
{
    student *book=[[student alloc]init];
    FMDatabase *db=[self openTable];
    NSString *sql=@"insert into t_table (name,age)values(?,?);";
    BOOL result=  [db executeUpdate:sql,book.name,@(book.age)];
    if (result) {
        NSLog(@"插入数据成功");
    }
        [db close];
  }
  • 更新数据
-(void)updata
{
    student *book=[[student alloc]init];
    FMDatabase *db=[self openTable];
    NSString *sql=@"updata t_table set name=?,age=? where id=?";
    BOOL result=[db executeUpdate:sql,book.name,@(book.age)];
    if (result) {
        NSLog(@"更新数据失败");
            }
    [db close];
}
  • 删除数据
-(void)del
{
    student *book=[[student alloc]init];
    FMDatabase *db=[self openTable];
    NSString *sql=@"delete from t_table where id=?";
    BOOL result=[db executeUpdate:sql,@(book.id)];
    if (result) {
        NSLog(@"删除数据成功");
    }
    [db close];
}
  • 查询数据
-(NSMutableArray *)queryAll
{
    
    FMDatabase *db=[self openTable];
    NSString *sql=@"select *from t_table ;";
    FMResultSet *result=[db executeQuery:sql];
    NSMutableArray *books=[NSMutableArray array];
    //不断往下取数据
    while (result.next) {
          //获取当前所指向的数据
        student *students=[[student alloc]init];
        students.id=[result intForColumn:@"id"];
        students.name=[result stringForColumn:@"name"];
        students.age=[result intForColumn:@"age"];
        [books addObject:students ];
    }
    return books;
}

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/23157.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者Jasmine的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!