首先这里要说明一下,为什么用FMDB而不用Core Data呢,因为我们不知道Core Data是如何映射对象里面的属性关系的,如果我们更改了属性的话,就会报错

首先是创建LKDBHelper对象

LKDBHelper * dbHelper = [LKDBHelper getUsingLKDBHelper];

然后根据model创建表

[dbHelper createTableWithModelClass:[MyWorkModelclass]];

好了,这就创建完了,接下来看看这个model里面的一些操作

.h文件

#import "ITTBaseModelObject.h"

#import "MyWorkListModel.h"
#import "MyWorkSettingModel.h"
@interface MyWorkModel : ITTBaseModelObject @property(retain,nonatomic) UIImage * thumbnail;
@property(retain,nonatomic) NSString * workName;
@property(retain,nonatomic) NSString * workNumber;
@property(retain,nonatomic) NSString * createDate;
@property(retain,nonatomic) NSString * userId;
@property(retain,nonatomic) NSString * templateId; // 预览的时候用
@property(retain,nonatomic) NSString * workState;// 作品状态 1,自由状态 2,购物车状态
@property(retain,nonatomic) NSString * workType; // 作品类型
// db attri 在购物车结算的时候用
@property (retain,nonatomic) NSString * price;
@property (retain,nonatomic) NSString * productId;
@property (retain,nonatomic) NSString * subProId;
@property (retain,nonatomic) NSString * pId;// 上传服务器返回的作品id
@property (retain,nonatomic) NSString * thumnailId;//缩略图路径 @property (nonatomic, retain)MyWorkSettingModel *myWorkSettingModel;
@property (nonatomic, retain)MyWorkListModel *myWorkListModel; +(MyWorkModel *) getMyWorkWithWorkId:(NSInteger ) rowId;
+(NSMutableArray * ) searchAllMyWorkWithUid:(NSString*) uid; +(BOOL)updateMyWorkState:(MyWorkModel *) myWork workState:(NSString *)workState;
+(void)upMyWorkUserID:(MyWorkModel *)myWork userId:(NSString*) uid;
+(void)updataMyWork:(MyWorkModel * )myWork updataPar:(NSDictionary * ) paraDic; +(NSMutableArray * ) searchInShopCarWorkWithUid:(NSString*) uid;
+(void) deleteMyWork:(MyWorkModel *)myWork;
+(BOOL)setMyworWithPid:(NSString * ) pid myWork:(MyWorkModel *)myWork;
+(MyWorkModel *) getMyworkWithPid:(NSString*)pid; @end

.m文件

//
// MyWorkModel.m
// wanhuPrint
//
// Created by Mao on 13-7-30.
//
// #import "MyWorkModel.h"
@implementation MyWorkModel - (id)init
{
self = [super init];
if (self) {
}
return self;
} /**
这里映射的时候要注意,返回的诗歌字典,左边是对应的属性名,右边是LKSQLInherit
**/
+(NSDictionary *)getTableMapping
{
return @{
@"workName":LKSQLInherit,
@"workNumber":LKSQLInherit,
@"createDate":LKSQLInherit,
@"userId":LKSQLInherit,
@"workType":LKSQLInherit,
@"userId": LKSQLInherit,
@"templateId":LKSQLInherit,
@"workState":LKSQLInherit,
@"price":LKSQLInherit,
@"productId":LKSQLInherit,
@"subProId":LKSQLInherit,
@"pId":LKSQLInherit,
@"thumnailId":LKSQLInherit
};
} /*
这个方法返回表名
*/
+(NSString *)getTableName
{
return @"MyWorksTable";
} /*
这个方法返回版本号,用于更新数据库
*/
+(int)getTableVersion
{
return ;
} -(void)dealloc
{
[_createDate release];
[_workName release];
[_thumbnail release];
[_workNumber release];
[_userId release];
[_workState release];
[_templateId release];
[_subProId release];
[_productId release];
[_price release];
[_pId release];
[_thumnailId release];
[super dealloc];
} #pragma mark - DBUtil
/*获取单一作品,从一个model根据rowid查询一个model,注意where后面跟NSString or NSDictionary or nil,orderBy是排序方法,for example:Ascending "name asc",Descending "name desc",此处不用排序。查询方法返回的是一个model或者一个NSArray
*/
+(MyWorkModel *) getMyWorkWithWorkId:(NSInteger ) rowId
{
LKDBHelper * help = [LKDBHelper getUsingLKDBHelper];
MyWorkModel * myWork=[help searchSingle:[MyWorkModel class] where:[NSString stringWithFormat:@"rowId=%d",rowId] orderBy:nil];
return myWork;
} // 显示我所有的作品,根据uid查询一组model,返回NSArray
+(NSMutableArray * ) searchAllMyWorkWithUid:(NSString*) uid
{
NSMutableArray * arr= [[LKDBHelper getUsingLKDBHelper] search:[MyWorkModel class] where:[NSString stringWithFormat:@"userId=%@",uid] orderBy:@"rowId desc" offset: count:];
return arr;
} /*
根据uid更新一个model,where后面跟主键或者rowid
*/
+(void)upMyWorkUserID:(MyWorkModel *)myWork userId:(NSString*) uid
{
LKDBHelper * helper =[LKDBHelper getUsingLKDBHelper];
[helper updateToDB:[MyWorkModel class] set:[NSString stringWithFormat:@"userId=%@",uid] where: @{@"rowId":[NSString stringWithFormat:@"%d",myWork.rowid]}];
} //修改我的作品状态 1,自由状态 2.在购物车中
+(BOOL)updateMyWorkState:(MyWorkModel *) myWork workState:(NSString *)workState
{
LKDBHelper *help =[LKDBHelper getUsingLKDBHelper];
if([help isExistsClass:[MyWorkModel class] where:@{@"rowId":[NSString stringWithFormat:@"%d",myWork.rowid]}]){
BOOL isUpdate= [ help updateToDB:[MyWorkModel class] set:[NSString stringWithFormat:@"workState = %@",workState] where:@{@"rowId":[NSString stringWithFormat:@"%d",myWork.rowid]}];
return isUpdate;
}
return NO;
} +(void)updataMyWork:(MyWorkModel * )myWork updataPar:(NSDictionary * ) paraDic
{ NSString * keyStr = [paraDic objectForKey:@"KEY"];
NSString * value =[paraDic objectForKey:@"VALUE"];
LKDBHelper * help = [LKDBHelper getUsingLKDBHelper];
[help updateToDB:[MyWorkModel class] set:[NSString stringWithFormat:@"%@ = %@",keyStr,value] where:@{@"rowId":[NSString stringWithFormat:@"%d",myWork.rowid]}];
} //设置pid
+(BOOL)setMyworWithPid:(NSString * ) pid myWork:(MyWorkModel *)myWork
{
LKDBHelper * help = [LKDBHelper getUsingLKDBHelper];
if([help isExistsClass:[MyWorkModel class] where:@{@"rowId":[NSString stringWithFormat:@"%d",myWork.rowid]}]){
BOOL isSetPid =[help updateToDB:[MyWorkModel class] set: [NSString stringWithFormat:@"pId= %@",pid] where:@{@"rowId":[NSString stringWithFormat:@"%d",myWork.rowid]}];
return isSetPid;
}
return NO;
} +(MyWorkModel *) getMyworkWithPid:(NSString*)pid
{
LKDBHelper * help = [LKDBHelper getUsingLKDBHelper];
MyWorkModel*myWork =[help searchSingle:[MyWorkModel class] where:[NSString stringWithFormat:@"pId=%@",pid] orderBy:nil];
return myWork;
}
//获取所有购物车中的作品
+(NSMutableArray * ) searchInShopCarWorkWithUid:(NSString*) uid
{
NSMutableArray * arr= [[LKDBHelper getUsingLKDBHelper] search:[MyWorkModel class] where:[NSString stringWithFormat:@"userId =%@ and workState = 2",uid] orderBy:@"createDate" offset: count:];
return arr;
}
+(void) deleteMyWork:(MyWorkModel *)myWork
{
LKDBHelper * help = [LKDBHelper getUsingLKDBHelper];
[help deleteToDB:myWork callback:^(BOOL result) {
if (!result) {
[help deleteToDB:myWork];
}
}];
}
@end

LKDBHelper Sqlite操作数据库的更多相关文章

  1. iOS 数据储存--SQLite 操作数据库-FMDB,sqlite数据类型,保存图片,demo

    1.SQLite 语句中 数据类型的储存 /* 不区分大小写 char(长度).字符串 NULL. 空值 INTEGER. 整型 REAL.浮点型 TEXT.文本类型 BLOB. 二进制类型,用来存储 ...

  2. sqlite:多线程操作数据库“database is locked”解决方法(二)

    上一篇博客<sqlite:多线程操作数据库“database is locked”解决方法>通过注册延时函数的方法来处理数据库被锁的问题.此方法固然能解决问题,但是在多个线程向数据库写入大 ...

  3. iOS - SQLite Database 操作数据库

    iOS - SQLite Database 操作数据库   Sqlite 能被用在ios上做数据处理用,只要你懂得一点sql 就很容易使用sqlite 1:创建一个简单的View based appl ...

  4. Qt之操作数据库(SQLite)实例

    QtSql模块提供了与平台以及数据库种类无关的访问SQL数据库的接口,这个接口由利用Qt的模型视图结构将数据库与用户界面集成的一套类来支持.QSqlDatabase对象象征了数据库的关联.Qt使用驱动 ...

  5. android: SQLite使用 SQL 操作数据库

    虽然 Android 已经给我们提供了很多非常方便的 API 用于操作数据库,不过总会有一些 人不习惯去使用这些辅助性的方法,而是更加青睐于直接使用 SQL 来操作数据库.这种人 一般都是属于 SQL ...

  6. Android中SQLite数据库操作(2)——使用SQLiteDatabase提供的方法操作数据库

    如果开发者对SQL语法不熟,甚至以前从未使用过任何数据库,Android的SQLiteDatabase提供了insert.update.delete或query语句来操作数据库. 一.insert方法 ...

  7. greenDao:操作数据库的开源框架

    greenDAO: Android ORM for your SQLite database 1. greenDao库获取 英文标题借鉴的是greendrobot官网介绍greenDao时给出的Tit ...

  8. sqlite嵌入式数据库C语言基本操作(2)

    :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0,.1);border-radius:3px ...

  9. sqlite嵌入式数据库C语言基本操作(1)

    sqlite嵌入式数据库C语言基本操作(1) :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0, ...

随机推荐

  1. seaborn(matplotlib)画图,linux系统中文乱码等问题解决

    data = pd.read_json(json.dumps(issue_dpl)) # set pic size plt.figure(figsize=(13, 5)) sns.set_style( ...

  2. python基础26 -----python进程及协成

    一.进程 1.multiprocessing模块实现多进程并发. 1.1multiprocessing包是Python中的多进程管理包,与threading.Thread类似,它可以利用multipr ...

  3. HackerRank - lonely-integer 【水】

    题意 给出一系列数字,输出那个出现次数为奇数次的数字 思路 用MAP标记一下,在输入的时候判断一下 之前有没有输入过,如果有,就抹掉 最后剩下的那个 就是出现次数为奇数的 或者可以用 位运算 AC代码 ...

  4. 【leetcode刷题笔记】Regular Expression Matching

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  5. hadoop实战项目:查找相同字母组成的字谜

    前面我们学习了MapReduce编程思想和编程示例,那么本节课程同学们一起操练操练,动手完成下面的项目. 项目需求 一本英文书籍包含成千上万个单词或者短语,现在我们需要在大量的单词中,找出相同字母组成 ...

  6. QFile操作文件

    1.构造QFile对象 QFile file("C:\a.txt"); 或者 QFile *file = new QFile("C:\a.txt"); 2.设置 ...

  7. 手把手教你使用eclipse+qemu+gdb来单步调试ARM内核【学习笔记】

    平台信息:linux4.0 平台:qemu 作者:庄泽彬 说明:笨叔叔的Linux视频的笔记 一.编译linux源码 export CROSS_COMPILE=arm-linux-gnueabi- e ...

  8. JMeter学习(九)分布式部署

    Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误.为了让jmeter工具 ...

  9. 2.virtualenv安装和配置以及在PyCharm中如何使用虚拟环境

    virtualenv优点 使不同应用开发环境相互独立 环境升级不影响其它应用,也不会影响全局的python环境 它可以防止系统中出现包管理混乱和版本的冲突 1.使用virtualenv pip ins ...

  10. 深入Spring:自定义注解加载和使用

    前言 在工作中经常使用Spring的相关框架,免不了去看一下Spring的实现方法,了解一下Spring内部的处理逻辑.特别是开发Web应用时,我们会频繁的定义@Controller,@Service ...