对fmdb简单的封装
来源:互联网 发布:linux杀java进程 编辑:程序博客网 时间:2024/06/05 02:38
一直想对FMDB 进行封装一下,却不知道怎么去封装,今天闲来没事,就简单封装了一下,如果有什么不对的地方请大家指出
首先自己定义了一个单例MySqlTool,在其.h文件中实现
#import <Foundation/Foundation.h>
#import "FMDatabase.h"
@interface MySqlTool :NSObject
@property (nonatomic,strong)FMDatabase *db;
+ (MySqlTool *)sharedInstance;
- (void)creatTable:(NSString*)tableName; //创建表
- (void)insertData:(NSDictionary*)dic intoTable:(NSString *)tableName; //插入数据
- (void)deleteData:(NSDictionary *)dic fromTable:(NSString *)tableName; //删除单个数据
- (NSDictionary *)queryDataFromTable:(NSString *)tableName;//获取表tableName中所有的数据
@end
并在.m文件中实现一下方法
#import "MySqlTool.h"
#import "FMDatabaseAdditions.h"
staticMySqlTool *mySqlTool = nil;
@implementation MySqlTool
@synthesize db = db;
+ (MySqlTool *)sharedInstance
{
static dispatch_once_t onceDispatch;
dispatch_once(&onceDispatch,^{
mySqlTool = [[MySqlToolalloc]init];
});
returnmySqlTool;
}
//获得存放数据库文件的沙盒地址
- (NSString *)databaseFilePath
{
NSArray *filePath =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentPath = [filePath objectAtIndex:0];
NSLog(@"%@",filePath);
NSString *dbFilePath = [documentPath stringByAppendingPathComponent:@"db.sqlite"];
return dbFilePath;
}
//创建数据库的操作
- (void)creatDatabase
{
db = [[FMDatabasedatabaseWithPath:[selfdatabaseFilePath]]retain];
}
- (void)creatTable:(NSString*)tableName
{
//先判断数据库是否存在,如果不存在,创建数据库
if (!db) {
[selfcreatDatabase];
}
//判断数据库是否已经打开,如果没有打开,提示失败
if (![db open]) {
NSLog(@"数据库打开失败");
return;
}
//为数据库设置缓存,提高查询效率
[dbsetShouldCacheStatements:YES];
//判断数据库中是否已经存在这个表,如果不存在则创建该表
if ([db open]) {
if (![db tableExists:tableName]) {
NSString *sql = [NSStringstringWithFormat:@"CREATE TABLE '%@' ('name' CHAR(30) PRIMARY KEY, 'age' INTEGER)",tableName];
BOOL res = [dbexecuteUpdate:sql];
if (!res) {
debugLog(@"error when creating db table");
}else {
debugLog(@"succ to creating db table");
}
[dbclose];
}else{
debugLog(@"table exist!!!!!");
}
}else {
debugLog(@"error when open db");
}
}
- (void)insertData:(NSDictionary*)dic intoTable:(NSString *)tableName
{
//判断是否有数据库
if (!db) {
[selfcreatDatabase];
}
if (![db open]) {
NSLog(@"db open error");
return;
}
//判断数据库中是否已经存在这个表,如果不存在则创建该表
if (![db tableExists:tableName]) {
[selfcreatTable:tableName];
}
//查询表中是否有该条数据,有则修改,无则插入
NSString *seachStr = [NSStringstringWithFormat:@"select * from %@ where name = ?",tableName];
FMResultSet *rs = [dbexecuteQuery:seachStr,[dic objectForKey:@"name"]];
if ([rs next]) {
NSString *updateStr = [NSStringstringWithFormat:@"update %@ set age = ? where name = ?",tableName];
BOOL res = [dbexecuteUpdate:updateStr,[dic objectForKey:@"age"],[dic objectForKey:@"name"]];
if (res) {
NSLog(@"data update success!");
}else{
NSLog(@"data update fail!");
}
}else{
NSString *insertStr = [NSStringstringWithFormat:@"INSERT INTO %@ (name, age) VALUES (?,?)",tableName];
BOOL res = [dbexecuteUpdate:insertStr,[dic objectForKey:@"name"],[dic objectForKey:@"age"]];
if (res) {
NSLog(@"data insert success!");
}else{
NSLog(@"data insert fail!");
}
}
[dbclose];
}
- (void)deleteData:(NSDictionary *)dic fromTable:(NSString *)tableName
{
//判断是否有数据库
if (!db) {
[selfcreatDatabase];
}
if (![db open]) {
NSLog(@"db open error");
return;
}
//判断数据库中是否已经存在这个表,如果不存在则创建该表
if (![db tableExists:tableName]) {
[selfcreatTable:tableName];
}
//判断数据库中是否有这条数据,有则删除
NSString *sqlStr = [NSStringstringWithFormat:@"select * from %@ where name = ?",tableName];
FMResultSet *rs = [ db executeQuery:sqlStr,[dic objectForKey:@"name"]];
if ([rs next]) {
NSString *deleteStr = [NSStringstringWithFormat:@"delete from %@ where name = ?",tableName];
BOOL res = [dbexecuteUpdate:deleteStr,[dic objectForKey:@"name"]];
if (res ) {
NSLog(@"delete data sucess!!!!");
}else{
NSLog(@"delete data failure!");
}
}
[dbclose];
}
- (NSDictionary *)queryDataFromTable:(NSString *)tableName
{
//判断是否有数据库
if (!db) {
[selfcreatDatabase];
}
if (![db open]) {
NSLog(@"db open error");
return nil;
}
//判断数据库中是否已经存在这个表,如果不存在则创建该表
if (![db tableExists:tableName]) {
[selfcreatTable:tableName];
}
if ([db open]) {
NSString * sql = [NSStringstringWithFormat:@"select * from %@",tableName];
FMResultSet * rs = [dbexecuteQuery:sql];
while ([rs next]) {
NSString * name = [rs stringForColumn:@"name"];
int age = [rs intForColumn:@"age"];
NSLog(@"name = %@,age = %d",name,age);
NSDictionary *divc = [[NSDictionaryalloc]initWithObjectsAndKeys:name,@"name",[NSNumbernumberWithInt:age],@"age",nil];
return divc;
}
[dbclose];
}
}
@end
- 对fmdb简单的封装
- ios 对FMDB 简单封装
- FMDB的简单封装
- FMDB的简单封装
- 对FMDB的封装JRDB
- 对FMDB进行的二次封装
- 简单封装FMDB操作sqlite的模板
- iOS简单runtime封装fmdb的使用
- fmdb的封装
- FMDB的二次封装
- FMDB-一个sqlite的封装
- FMDB-一个sqlite的封装
- 对Freemarker的简单封装
- 对NSURLConnection的简单封装
- 对AFNetworking的简单封装
- 对AFNetworking的简单封装
- 对mysql的简单封装
- 对log4j的简单封装
- 微软100题(1) 二元查找树转变成排序的双向链表
- QtScript中脚本与C++代码的交互
- unity之NGUI之Anchors代码创建
- Linux v2.6内核编程之/sys/中的kobject
- 读取excel内容
- 对fmdb简单的封装
- 有效解决android sdk content loader 0%
- It Xue
- 监听系统时间的变化(一分钟变化一次)
- 超越光速:时间旅行不是梦
- 第9周项目5 方程也是类
- 判断点是否在三角形内
- 实时显示iOS编写UI代码效果
- Java运算符优先级