PYFMDB

基于FMDB数据库操作类
授权协议 MIT
开发语言 Objective-C
所属分类 程序开发、 ORM/持久层框架
软件类型 开源软件
地区 不详
投 递 者 禹正阳
操作系统 OS X
开源组织
适用人群 未知
 软件概览

前言

之前是一直做web开发,对于做web开发的人而言一定熟悉各种ORM,各种语言针对mysql的ORM有很多,比如PHP的各类框架yii,thinkphp,laravel,ruby语言的rails, GO语言的beego等,IOS开发则面对的数据库是sqlite。FMDB 是基于sqlite的数据库操作类,稳定,但用起来还是不够简洁,PYFMDB是基于FMDB的更高层次的数据库操作类。
程序介绍

 PYFMDB分为三部分,PYFMDB 基于FMDB负责数据库底层操作处理,PYTable是自定义Table的基类,提供基于具体数据库表的操作,是更高层次的封装PYFMDB,PYStructure是定义数据库表结构处理类。
快速入门
导入PYFMDB

你可以在 Podfile 中加入下面一行代码来使用PYFMDB

pod 'PYFMDB'

创建自定义Table类

创建一个Table类继承PYTable,例如演示代码中创建了CarTable类。
设置数据库表名

在CarTable.m 中 重写如下方法:

-(NSString *)tableName{
    return @"car";
}

设置数据库表结构

    在CarTable.m 中 重写如下方法:

-(PYStructure *)structure{
    PYStructure * st = [[PYStructure alloc] init];
    [st addWithField:@"id" andType:PYStructureTypeAutoInc];
    [st addWithField:@"name" andType:PYStructureTypeNormalText];
    [st addWithField:@"wheels" andType:PYStructureTypeNormalInt];
    return st;
}

PYStructureType

  •  PYStructureTypeAutoInc = 0,//主键,int类型,自增

  •  PYStructureTypePrimaryInt = 1,//主键,int类型,自增

  •  PYStructureTypePrimaryText = 2,//主键,text类型

  •  PYStructureTypeNormalInt = 3,//普通列,int类型

  •  PYStructureTypeNormalText = 4,//普通列,text类型

自定义Table类的使用

 table类可以实现针对当前table的增删改查数据库操作。

CarTable *table = [[CarTable alloc] init];

新增数据

普通新增数据

NSDictionary *fields = @{@"name":@"宝马",@"wheels":@1}; 
[table addFields:fields];

新增或者更新数据【判断数据是否已存在,存在则更新数据,不存在则新增数据】

NSDictionary *fields = @{@"name":@"宝马",@"wheels":@1};
[table addOrUpdateFields:fields andWhere:@"name='宝马'"];

判断是否已经存在数据,仅不存在数据时更新数据

NSDictionary *fields = @{@"name":@"宝马",@"wheels":@1};
[table addFieldsIfNotExist:fields];

删除数据

指定字段删除

NSString *where = @"name='宝马'";
[table deleteWithWhere:where];

多种条件删除

NSString *where = @"name='宝马' and id >=5";
[table deleteWithWhere:where];

清空数据表

[table truncate];

更新数据

更新多个字段

NSString *where = @"name='宝马'";
NSDictionary *fields = @{@"name":@"奔驰",@"wheels":@2};
[table updateFields:fields andWhere:where];

更新1个字段

[table setField:@"name" andValue:@"奔驰" andWhere:@"name='宝马'"];

查询数据

查询表全部数据,全部字段,返回的结果为NSArray

NSArray *results = [table selectAll];

按条件查询数据,全部字段,返回的结果为NSArray

NSString *where = @"name='宝马'";
NSArray *results = [table selectWithWhere:where];

按条件查询数据,指定字段,返回结果为NSArray 多个字段用半角逗号隔开

NSString *where = @"name='宝马'";
NSString *fields = @"id,wheels";
NSArray *results = [table selectWithWhere:where andFields:fields];

按条件查询数据,指定字段,设置分页,返回结果为NSArray 要查询全部字段时 用 * 代表查询全部字段

NSString *where = @"name='宝马'";
NSString *fields = @"id,wheels";
//NSString *fields = @"*";
NSArray *results = [table selectWithWhere:where andFields:fields andPage:1 andPageSize:10];//取第一页,每页10条

按条件查询数据,指定字段,设置分页,设置排序,返回结果为NSArray 排序中 desc 代表 降序,asc代表升序 单个字段排序 如 id desc 多个字段排序 如 id,wheel asc

NSString *where = @"name='宝马'";
NSString *fields = @"id,wheels";
//NSString *fields = @"*";
NSArray *results = [table selectWithWhere:where andFields:fields andPage:1 andPageSize:10 andOrder:@"id desc"];

按条件查询单行数据,返回结果为NSDictionary

NSString *where = @"name='宝马'";
NSDictionary *result = [table findWithWhere:where];

按条件查询单行单个字段数据,返回结果为id类型

id result = [table getField:@"name" andWhere:@"id=1"];

统计表总行数

NSUInteger tableCount = [table count];

判断表是否为空

if([table isEmpty]){
        //table is empty
 }

判断数据是否存在

NSDictionary *fields = @{@"name":@"宝马",@"wheels":@1};
    if([table hasFields:fields]){
        //数据已存在
    }

判断where查询是否有数据

if([table hasWhere:@"name='宝马'"]){
        //有查询结果
    }

原生sql支持

执行一个sql查询

NSString *sql = @"select * from car";
NSArray *results = [table executeQueryWithSql:sql];

执行一个sql操作,如更新,删除,插入等

NSString *sql = @"delete from car where name='BMW'";
BOOL result = [table executeUpdateWithSql:sql];

调试信息

NSLog(@"dbpath:%@",table.databasePath);//数据库位置
NSLog(@"lastSql:%@",table.lastSql);//最后执行的sql
NSLog(@"dbname:%@",table.databaseName);//数据库名
NSLog(@"tablename:%@",table.tableName);//数据表名
NSLog(@"table structure:%@",table.structure.structureDictory);//数据表结构
NSLog(@"table fields:%@",table.structure.fieldsString);//数据表字段
 相关资料
  • 基于FMDB的数据库增删改查Demo。其中包括 statusBar 上显示Log的用法。仅支持ARC。比较适合新手。 [Code4App.com]

  • 本文向大家介绍PHP基于单例模式实现的数据库操作基类,包括了PHP基于单例模式实现的数据库操作基类的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP基于单例模式实现的数据库操作基类。分享给大家供大家参考,具体如下: 配置文件: php 数据库基类: 更多关于PHP操作数据库相关内容感兴趣的读者可查看本站专题:《php+mysql数据库操作入门教程》、《PHP基于pdo操作数据库技巧总结

  • 本文向大家介绍Java基于jdbc连接mysql数据库操作示例,包括了Java基于jdbc连接mysql数据库操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java基于jdbc连接mysql数据库操作。分享给大家供大家参考,具体如下: 用JDBC来连接数据库,基本步骤都大同小异,只不过不同的数据库之间的URL有些不同。其基本步骤可分为以下几点: 1、加载相应数据库的JDBC驱动程

  • 本文向大家介绍Django基于ORM操作数据库的方法详解,包括了Django基于ORM操作数据库的方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Django基于ORM操作数据库的方法。分享给大家供大家参考,具体如下: 1、配置数据库 2、在项目目录中建立“web站点”(app) 3、配置新建的app(blog和article) 4、以blog为例,创建模型 5、同步模型到数据库中

  • 数据库的操作是每个phpweb框架的核心功能,我们提供数据库数据库的标准调用模式为: 你可以执行严格模式,也就是左边的那条线,Controller->Service->Dao->Model->DB,也可以走简单模式 Controller->Model->DB。个人根据自己的需求,走标准麻烦些(几乎所有的机构和系统都是这样^_^), 但是扩展性会好些,但是使用简单模式开发效率就会高些,性能会好些,但

  • 这一小节是对数据库操作做一个简单的封装,不涉及复杂的事务操作等。 我选用了Sql2o作为底层数据库框架作为支持,它的简洁易用性让我刮目相看,后面我们也会写如何实现一个ORM框架。 /** * 数据库支持 * @author biezhi * */ public final class MarioDb { private static Sql2o sql2o = null;

  • 本文向大家介绍Java基于JDBC连接数据库及显示数据操作示例,包括了Java基于JDBC连接数据库及显示数据操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java基于JDBC连接数据库及显示数据操作。分享给大家供大家参考,具体如下: 1. 导入jdbc包 java要连接MySQL数据库需要用到JDBC工具(mysql-connector-java-5.1.39-bin.jar)

  • 本文向大家介绍Android SQLite数据库基本操作方法,包括了Android SQLite数据库基本操作方法的使用技巧和注意事项,需要的朋友参考一下 程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数据库