数据库的简单封装
来源:互联网 发布:数据挖掘:概念与技术 编辑:程序博客网 时间:2024/06/11 13:31
#import <Foundation/Foundation.h>@interface QHDatabaseManager : NSObject+ (instancetype)databaseManager;//创建表- (BOOL)insertIntoTableWithObject:(id)object;//查询所有数据- (NSArray *)queryAllUserObjectsFromDatabase;- (NSArray *)queryAllUserObjectsFromDatabaseWithParameters:(NSDictionary *)parameters;//更新数据- (BOOL)updateUserObjectWithParameters:(NSDictionary *)parameters;- (void)deleteUserObjectFromDatabaseWithName:(NSString *)name;- (BOOL)close;@end
#import "QHDatabaseManager.h"#import "FMDatabase.h"#import "User.h"@interface QHDatabaseManager(){ FMDatabase *_database;}@end@implementation QHDatabaseManager- (instancetype)init{ self = [super init]; if (self) { //1.创建数据库 if(![self createDatabaseAndOPen]) { //创建失败 return nil; } [self createUserTable]; } return self;}#pragma mark - 单例创建//创建单例对象+ (instancetype)databaseManager{ static QHDatabaseManager *manager =nil; @synchronized(self) { if(!manager) { manager = [[QHDatabaseManager alloc]init]; } } return manager;#if 0 //如果数据库创建失败 我们不能再次创建 以为gcd dispatch_once 方法只走一次 //GCD 的方法创建 static QHDatabaseManager *manager = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ manager = [[QHDatabaseManager alloc]init]; }); return manager;#endif}//返回数据库路径- (NSString *)databasePath{ NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; return [documentPath stringByAppendingPathComponent:@"user.db"];}//创建数据库并打开- (BOOL)createDatabaseAndOPen{ //1.初始化数据库 _database = [FMDatabase databaseWithPath:[self databasePath]]; if (![_database open]) { NSLog(@"打开失败"); return NO; } else { NSLog(@"打开成功"); } //return YES; return [_database open];}- (void)createUserTable{ NSString *sql = @"create table if not exists User(id integer primary key autoincrement,name text,age integer)"; BOOL isOK = [_database executeUpdate:sql]; if (isOK) { NSLog(@"创建表成功"); } else { NSLog(@"创建表失败"); }}//插入数据- (BOOL)insertIntoTableWithObject:(id)object{ #if 0 //NSString *sql = nil; if ([object isKindOfClass:[User class]]) { User *user = object; return [_database executeUpdate:[NSString stringWithFormat:@"insert into User (name,age) values('%@','%@')",user.name,@(user.age)]]; } return NO;#endif NSString *sql = nil; if ([object isKindOfClass:[User class]]) { User *user = object; sql = @"insert into User (name,age) values(?,?)"; return [_database executeUpdate:sql,user.name,@(user.age)]; } return NO;}//查询所有数据- (NSArray *)queryAllUserObjectsFromDatabase{ NSString *sql = @"select * from User"; //创建个数组保存模型 NSMutableArray *mArray = [NSMutableArray array]; FMResultSet *result = [_database executeQuery:sql]; while (result.next) { //根据字段取值 NSString *name = [result stringForColumn:@"name"]; int age = [result intForColumn:@"age"]; User *user = [[User alloc]init]; user.name = name; user.age = age; [mArray addObject:user]; } return mArray;}//有条件查询- (NSArray *)queryAllUserObjectsFromDatabaseWithParameters:(NSDictionary *)parameters{ NSMutableString *string = [NSMutableString string]; //获取字典所有的key NSArray *allKeys = parameters.allKeys; for (int i = 0; i < parameters.count; i++) { //key NSString *key = allKeys[i]; if (i == parameters.count -1) { [string appendFormat:@"%@=%@",key,parameters[key]]; } else { [string appendFormat:@"%@=%@ and",key,parameters[key]]; } } return nil;}- (BOOL)updateUserObjectWithParameters:(NSDictionary *)parameters{ return YES;}- (void)deleteUserObjectFromDatabaseWithName:(NSString *)name{ NSString *sql = @"delete from User where name = ?"; [_database executeUpdate:sql,name];}- (BOOL)close{ return [_database close];}@end
0 0
- 数据库的简单封装
- 数据库的简单封装
- ACCSEE数据库简单的封装
- Mysql数据库应用中简单的封装
- jsp对数据库的简单封装
- 一个简单的封装数据库类
- Android数据库操作的简单封装
- 简单的单利模式封装数据库
- 数据库SQLiteOpenHelper的简单封装使用
- Android数据库操作的简单封装
- 链接Oracle数据库简单封装
- Sqlite3 数据库介绍及常用方法的简单封装
- Sqlite3 数据库介绍及常用方法的简单封装
- Sqlite3 数据库介绍及常用方法的简单封装
- 对数据库DML操作进行封装成简单的工具
- 一个关于 CP30+DBUtils 的简单数据库操作封装
- ActiveSQLite更简单的Swift数据库方案(SQLite.swift封装)
- php封装一个简单的数据库操作类
- C语言的不知道第多少天(2)
- leetcode dp之Triangle
- springmvc中multipartFile文件上传
- Unsafe类
- Hello World——用思考揭开世界的一角
- 数据库的简单封装
- iOS多线程编程之NSThread的使用
- 黑马程序员_JAVA中正则表达式取子文本
- HDU-1560 DNA sequence
- NetBeans中窗体的隐藏
- Peeking Iterator【284】
- C语言中的冒泡排序思想
- 《OOC》笔记(3)——C语言变长参数va_list的用法
- 操作系统的特权指令