建立一个单例:

DataBaseHandle.h

#import <Foundation/Foundation.h>
@class PersonModel;
@class FMDatabase;
@interface DataBaseHandle : NSObject
@property(nonatomic,retain)FMDatabase *db;
//创建单例的的接口
+ (DataBaseHandle *)shareDateBaseHandle;
//创建一个Person表格
- (void)creatPersonTable;
//插入person的方法
- (void)insertPersonTable : (PersonModel *)person;
//写一个删除人的接口
- (void)deletePersonByPerssonID : (NSString *)ID;
//写一个修改人的接口
- (void)uodatePerson : (NSString *)age ByPersonID : (NSString *)ID;
//写一个查询所有人的接口
- (NSMutableArray *)selectAllPersonFromPersonTable;
@end

DataBaseHandle.m

#import "DataBaseHandle.h"
#import "FMDB.h"
#import "PersonModel.h"
@implementation DataBaseHandle
- (void)dealloc
{
    self.db = nil;
    [super dealloc];
}

创建单例的的接口:

//创建单例对象使其存在于静态区
static DataBaseHandle *handle = nil;
//创建单例的的借口
+ (DataBaseHandle *)shareDateBaseHandle{

    @synchronized(self){
        if (handle == nil) {
            handle = [[DataBaseHandle alloc]init];

        }
    }
    return handle;
}

写一个私有的方法,返回数据库的路径

- (NSString *)dbpath{
    return [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"db.sqlite"];

}

创建一个Person表格

//创建一个Person表格
- (void)creatPersonTable{
   //初始化数据库对象
    self.db = [FMDatabase databaseWithPath: [self dbpath]];
    //打开数据库
   BOOL isOpen = [self.db open];
    if (isOpen) {
        NSLog(@"打开成功");
        //创建表
     BOOL isCreat =   [self.db executeUpdate:@"create table if not exists Person(id integer primary key autoincrement,name text,gender text,age integer,salary integer)"];
        NSLog(@"%@",isCreat ? @"创建成功":@"创建失败");

    }else{
        NSLog(@"打开失败");
    }
}

四种方法:增、删、改、查;

//插入person的方法
- (void)insertPersonTable : (PersonModel *)person{
  BOOL isInsert =  [self.db executeUpdate:@"insert into Person(name,age)values(?,?)",person.name,person.age];
    NSLog(@"%@",isInsert ? @"插入成功":@"插入失败");

}

//写一个删除的接口
- (void)deletePersonByPerssonID : (NSString *)ID{
   BOOL isDelete = [self.db executeUpdate:@"delete from Person where id = ?",ID];
    NSLog(@"%@",isDelete ? @"删除成功":@"删除失败");
}

//写一个修改人的接口
- (void)uodatePerson : (NSString *)age ByPersonID : (NSString *)ID{
   BOOL isUpdate = [self.db executeUpdate:@"update Person set age = ? where id = ?",age,ID];
    NSLog(@"%@",isUpdate ? @"修改成功":@"修改失败");
}

//写一个查询所有人的接口
- (NSMutableArray *)selectAllPersonFromPersonTable{
    FMResultSet *set = [self.db executeQuery:@"select * from Person"];
    NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];
    while ([set next]) {
        NSInteger ID = [set intForColumn:@"id"];
        NSString *name = [set stringForColumn:@"name"];
        NSInteger age = [set intForColumn:@"age"];
        //创建Person对象存储信息
        PersonModel *p = [[PersonModel alloc]init];
        p.ID = [NSString stringWithFormat:@"%ld",ID];
        p.name = name;
        p.age = [NSString stringWithFormat:@"%ld",age];
        //添加到数组
        [array addObject:p];
        [p release];
    }
    return array;
}

建一个model类

PersonModel.h
#import <Foundation/Foundation.h>
@interface PersonModel : NSObject
@property(nonatomic,copy)NSString *ID;
@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *age;
@end

PersonModel.m
#import "PersonModel.h"

@implementation PersonModel
- (void)dealloc
{
    self.name = nil;
    self.age = nil;
    self.ID = nil;
    [super dealloc];
}
@end

===============================测试调用===============================

#import "FirstViewController.h"
#import "DataBaseHandle.h"
#import "PersonModel.h"
@interface FirstViewController ()
@property(nonatomic,retain)NSMutableArray *dataSource;//接收查询的结果
@end

@implementation FirstViewController
- (void)dealloc
{
    self.dataSource = nil;
    [super dealloc];
}
//懒加载
- (NSMutableArray *)dataSource{
    if (_dataSource == nil) {
        self.dataSource = [NSMutableArray arrayWithCapacity:0];
    }

    return [[_dataSource retain]autorelease];
}

TEXT:

- (void)viewDidLoad {
    [super viewDidLoad];
    //调用并验证
    [[DataBaseHandle shareDateBaseHandle]creatPersonTable];
    NSLog(@"%@",NSHomeDirectory());
    PersonModel *p = [[PersonModel alloc]init];
    p.name = @"小韩哥";
    p.age = @"20";
    //调用插入person的方法
//    [[DataBaseHandle shareDateBaseHandle]insertPersonTable:p];

    //接收数据库返回的查询结果
    self.dataSource = [[DataBaseHandle shareDateBaseHandle]selectAllPersonFromPersonTable];

    //调用删除人的方法
    [[DataBaseHandle shareDateBaseHandle]deletePersonByPerssonID:@"9"];

}

配置显示:

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    // Return the number of rows in the section.
    return self.dataSource.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"firstcell" forIndexPath:indexPath];
    PersonModel *p = self.dataSource[indexPath.row];
    cell.textLabel.text = p.name;

    return cell;
}

布局预览:

提示:重在封装SQLite思想,不在效果,能有效调用即可!

iOS中 用FMDB封装一个SQLite数据库的更多相关文章

  1. 在IOS中使用DES算法对Sqlite数据库进行内容加密存储并读取解密

    在IOS中使用DES算法对Sqlite 数据库进行内容加密存储并读取解密 涉及知识点: 1.DES加密算法: 2.OC对Sqlite数据库的读写: 3.IOS APP文件存储的两种方式及读取方式. 以 ...

  2. iOS中使用FMDB事务批量更新数据库

    今天比较闲看到大家在群里讨论关于数据库操作的问题,其中谈到了"事务"这个词,坦白讲虽然作为计算机专业的学生,在上学的时候确实知道存储过程.触发器.事务等等这些名词的概念,但是由于毕 ...

  3. IOS开发-UI学习-sqlite数据库的操作

    IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...

  4. 在VB中利用Nuget包使用SQLite数据库和Linq to SQLite

    上午解决了在C#中利用Nuget包使用SQLite数据库和Linq to SQLite,但是最后生成的是C#的cs类文件,对于我这熟悉VB而对C#白痴的来说怎么能行呢? 于是下午接着研究,既然生成的是 ...

  5. 创建一个 SQLite 数据库

    首先,我们学习如何创建一个SQLite 数据库.如果想要在data/example.sqlite 这个路径中创建一个示例数据库,就必须确保该路径存在.如果该路径不存在,就必须先创建路径:if (!di ...

  6. 将 flask 中的 session 存储到 SQLite 数据库中

    将 flask 中的 session 存储到 SQLite 数据库中 使用 flask 构建服务器后端时,常需要在浏览器端存储 cookie 用于识别不同用户,根据不同的 cookie 判断出当前请求 ...

  7. Electron中使用sql.js操作SQLite数据库

    推荐sql.js——一款纯js的sqlite工具. 一.关于sql.js sql.js(https://github.com/kripken/sql.js)通过使用Emscripten编译SQLite ...

  8. android 一个SQLite数据库多个数据表的基本使用框架 (带demo)

    android 一个SQLite数据库多个数据表(带demo) 前言        demo演示        一.搭建        二.建立实体类        三.建立数据库操作类        ...

  9. 在ios中使用FMDB

    SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK很早就支持了SQLite,在使用时,只需要加入 libsqlite3.dyli ...

随机推荐

  1. JAX-RPC 与 JAX-WS 的比较

    引言 Web 服务已经出现很久了.首先是 SOAP,但 SOAP 仅描述消息的情况,然后是 WSDL,WSDL 并不会告诉您如何使用 Java™ 编写 Web 服务.在这种情况下,JAX-RPC 1. ...

  2. sololearn的c++学习记录_4m11d

    Function Templates Functions and classes help to make programs easier to write, safer, and more main ...

  3. linkList hashSet ArrayList IO 序列化 1.1.瞬态transient .字符编码表 Properties

      Day12 IO  序列化 .递归_递归的概念_注意事项 1.递归:方法的递归调用--它是一种方法调用的方式--方法可以调用其本身 2.注意事项: 1).递归必须要有一个"出口(结束的条 ...

  4. 迭代器&生成器

    迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...

  5. ACM Bone Collector

      Many years ago , in Teddy's hometown there was a man who was called "Bone Collector". Th ...

  6. Java常用集合学习总结

    一  数组 数组可以存储基本数据类型和对象的一种容器,长度固定,所以不适合在对象数量未知的情况下使用. Arrays : 用于操作数组对象的工具类,里面都是静态方法. Arrays.asList:把A ...

  7. 拟将博客迁移到github

    其实博客园网站速度挺快的, 但是markdown的显示没有github美观. 尤其是代码高亮这一块. 近日发现github pages + vue + github api + stackedit 能 ...

  8. Android源码解析——Toast

    简介 Toast是一种向用户快速展示少量信息的视图.当它显示时,它会浮在整个应用层的上面,并且不会获取到焦点.它的设计思想是能够向用户展示些信息,但又能尽量不显得唐突.本篇我们来研读一下Toast的源 ...

  9. Spring Boot 中应用Spring data mongdb

    摘要 本文主要简单介绍下如何在Spring Boot 项目中使用Spring data mongdb.没有深入探究,仅供入门参考. 文末有代码链接 准备 安装mongodb 需要连接mongodb,所 ...

  10. springMVC源码分析--AbstractDetectingUrlHandlerMapping(五)

    上一篇博客springMVC源码分析--AbstractUrlHandlerMapping(三)中我们介绍了AbstractUrlHandlerMapping,主要介绍了一个handlerMap的ur ...