iOS sqlite ORM框架-LKDBHelper
LKDBHelper
一个sqlite ORM(全自动操作数据库)框架。
线程安全、不再担心递归锁死的问题
安装要求
- iOS 4.3+
- 仅支持 ARC
- FMDB
添加到你的项目
如果你使用 CocoaPods,直接添加下面的代码到你的 Podfile文件
pod 'LKDBHelper'
使用 Encryption,添加下面的代码(顺序不能错)
pod 'FMDB/SQLCipher'
pod 'LKDBHelper'
@property(strong,nonatomic)NSString* encryptionKey;
基础用法
创建一个 Objective-C类,作为 data model
@interface LKTest : NSObject
@property(copy,nonatomic)NSString* name;
@property NSUInteger age;
@property BOOL isGirl; @property(strong,nonatomic)LKTestForeign* address;
@property(strong,nonatomic)NSArray* blah;
@property(strong,nonatomic)NSDictionary* hoho; @property char like;
...
在 .m文件中重写 getTableName 方法(可选)
+(NSString *)getTableName
{
return @"LKTestTable";
}
在 .m文件中重写回调方法(可选)
@interface NSObject(LKDBHelper_Delegate) +(void)dbDidCreateTable:(LKDBHelper*)helper tableName:(NSString*)tableName;
+(void)dbDidAlterTable:(LKDBHelper*)helper tableName:(NSString*)tableName addColumns:(NSArray*)columns; +(BOOL)dbWillInsert:(NSObject*)entity;
+(void)dbDidInserted:(NSObject*)entity result:(BOOL)result; +(BOOL)dbWillUpdate:(NSObject*)entity;
+(void)dbDidUpdated:(NSObject*)entity result:(BOOL)result; +(BOOL)dbWillDelete:(NSObject*)entity;
+(void)dbDidDeleted:(NSObject*)entity result:(BOOL)result; ///data read finish
+(void)dbDidSeleted:(NSObject*)entity; @end
初始化你的 model,赋值后插入数据库
LKTestForeign* foreign = [[LKTestForeign alloc]init];
foreign.address = @":asdasdasdsadasdsdas";
foreign.postcode = 123341;
foreign.addid = 213214; //插入数据 insert table row
LKTest* test = [[LKTest alloc]init];
test.name = @"zhan san";
test.age = 16; //外键 foreign key
test.address = foreign;
test.blah = @[@"1",@"2",@"3"];
test.blah = @[@"0",@[@1],@{@"2":@2},foreign];
test.hoho = @{@"array":test.blah,@"foreign":foreign,@"normal":@123456,@"date":[NSDate date]}; //同步 插入第一条 数据 Insert the first
[test saveToDB];
//or
//[globalHelper insertToDB:test];
select、delete、update、isExists、rowCount ...
select: NSMutableArray* array = [LKTest searchWithWhere:nil orderBy:nil offset:0 count:100];
for (id obj in arraySync) {
addText(@"%@",[obj printAllPropertys]);
} delete: [LKTest deleteToDB:test]; update: test.name = "rename";
[LKTest updateToDB:test where:nil]; isExists: [LKTest isExistsWithModel:test]; rowCount: [LKTest rowCountWithWhere:nil];
参数描述 “where”
For example: single: @"rowid = 1" or @{@"rowid":@1} more: @"rowid = 1 and sex = 0" or @{@"rowid":@1,@"sex":@0} when where is "or" type , such as @"rowid = 1 or sex = 0"
you only use NSString array: @"rowid in (1,2,3)" or @{@"rowid":@[@1,@2,@3]} composite: @"rowid in (1,2,3) and sex=0 " or @{@"rowid":@[@1,@2,@3],@"sex":@0} If you want to be judged , only use NSString
For example: @"date >= '2013-04-01 00:00:00'"
表结构映射
重写 getTableMapping 方法(可选)
+(NSDictionary *)getTableMapping
{
//return nil
return @{@"name":LKSQLInherit,
@"MyAge":@"age",
@"img":LKSQLInherit,
@"MyDate":@"date",
@"color":LKSQLInherit,
@"address":LKSQLUserCalculate};
}
更新表(可选)
+(void)dbDidAlterTable:(LKDBHelper *)helper tableName:(NSString *)tableName addColumns:(NSArray *)columns
{
for (int i=0; i<columns.count; i++)
{
LKDBProperty* p = [columns objectAtIndex:i];
if([p.propertyName isEqualToString:@"error"])
{
[helper executeDB:^(FMDatabase *db) {
NSString* sql = [NSString stringWithFormat:@"update %@ set error = name",tableName];
[db executeUpdate:sql];
}];
}
}
}
设置列属性(可选)
+(void)columnAttributeWithProperty:(LKDBProperty *)property
{
if([property.sqlColumnName isEqualToString:@"MyAge"])
{
property.defaultValue = @"15";
}
if([property.propertyName isEqualToString:@"date"])
{
property.isUnique = YES;
property.checkValue = @"MyDate > '2000-01-01 00:00:00'";
property.length = 30;
}
}
demo 截屏
测试表数据
外键数据
github 原文地址
iOS sqlite ORM框架-LKDBHelper的更多相关文章
- Asp.net 高性能 Sqlite ORM 框架之 sqliteSugar
一.介简 easyliter框架的升级版本,并且正式命名为SqliteSugar框架,另外Sugar系列还有 MySql和MsSql版本,Oracle版本待开发中(因为客户端太大一直在忧郁当中) 用S ...
- Android SQLite ORM框架greenDAO在Android Studio中的配置与使用
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 博客园: 追风917 # 说明 greenDAO是安卓中处理SQLite数据库的一个开源的库,详情见其官网:我是官网 详 ...
- FMDB是iOS平台的SQLite数据库框架
1.FMDB简介 什么是FMDBFMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 为什么使用FMDB使用起来更加面向对象,省去了很多麻烦.冗余的C语言 ...
- sqlite表结构动态读取工具(Chole ORM框架)
Chole ORM框架 sqlIte于嵌入式数据库读取比较有利,不需要安装office也可以进行,可以在服务器系统当中使用. 所以我开发了这款工具,然后就是为了动态的读取表结构,然后根据表结构加载所有 ...
- 使用iOS原生sqlite3框架对sqlite数据库进行操作
摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ...
- 最好的5个Android ORM框架
在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...
- 推荐的Android ORM框架
1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...
- 最受欢迎的5个Android ORM框架
在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...
- [Android]Android端ORM框架——RapidORM(v2.1)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6020412.html [Android]Android端ORM ...
随机推荐
- VueCLi3 配置less变量
Step1. 文档介绍 // vue-cli css预处理文档: https://cli.vuejs.org/zh/guide/css.html#自动化导入 // less文档: https://ww ...
- 渗透测试初学者的靶场实战 2--墨者学院SQL注入—报错盲注
墨者SQL注入-MYSQL数据库实战环境 实践步骤 1. 决断注入点 输入单引号,提示错误信息: 输入and 1=1 返回页面正常: 输入 and 1=2 返回正常 输入-1,返回异常: 2. 带入s ...
- Dynamics 365 Portal 修改注册页面及Profile页面
一,Profile页面 客户要求在Portal Profile页面上添加性别字段,通过查看源代码发现,中间的联系人信息部分是引用的CRM中Contact实体的Portal Web Form表单,直接把 ...
- Spring Cloud Config实现集群配置中心
Spring Cloud Config为分布式系统提供了配置服务器和配置客户端,可以管理集群中的配置文件.使用Git.SVN等版本管理系统存放配置文件,配置服务器会到版本管理系统获取配置,集群中的配置 ...
- 智能家居手势识别,只需百度AI即可搞定
上次我尝试做了一个给眼镜加特效,针对的是静态图像,具体文章参考 https://ai.baidu.com/forum/topic/show/942890 . 这次我尝试在视频中加眼镜特效,并且加上手势 ...
- MySQL 有关MHA搭建与切换的几个错误log
1:masterha_check_repl 副本集方面报错 replicates is not defined in the configuration file! 具体信息如下: # /usr/l ...
- Nuxt+Vuex初体验
小呀嘛小二郎,背着书包上学堂... 今天一个困扰了我一周时间的问题终于被我解决了,值得庆祝 在Nuxt中使用Vuex实现数据存储 首先: 在store目录下新建一个index.js文件 需要有两个组件 ...
- Mysql 主从复制搭建-极简版
前言 自己在百度.Google一番踩坑搭建成功后,记录一下,也希望后来人不再被这些坑到. 这里为了方便使用 docker,不会的同学请移步相关 Docker 教程. 正文 1. 启动 mysql #启 ...
- jquery 点击tr选中checkbox,解决checkbox的默认点击事件被阻止的问题
1.第一种,!$(event.target).is('input'),判断触发事件的元素是否为input.此时使用event.target,而不是this,获取事件本身,防止触发事件冒泡的问题 ...
- JavaWeb学习——了解Servlet
JavaWeb学习——了解Servlet 摘要:本文主要学习了什么是Servlet,以及如何使用Servlet进行开发. 基础知识 背景 随着互联网技术的发展,基于HTTP和HTML的web应用急速增 ...