iOS中 用FMDB封装一个SQLite数据库
2015-10-16 17:34
525 查看
建立一个单例:
DataBaseHandle.h
DataBaseHandle.m
#import "DataBaseHandle.h"
#import "FMDB.h"
#import "PersonModel.h"
@implementation DataBaseHandle
- (void)dealloc
{
self.db = nil;
[super dealloc];
}
创建单例的的接口:
写一个私有的方法,返回数据库的路径
创建一个Person表格
四种方法:增、删、改、查;
//插入person的方法
- (void)insertPersonTable : (PersonModel *)person{
BOOL isInsert = [self.db executeUpdate:@"insert into Person(name,age)values(?,?)",person.name,person.age];
NSLog(@"%@",isInsert ? @"插入成功":@"插入失败");
}
//写一个删除的接口
- (void)deletePersonByPerssonID : (NSString *)ID{
BOOL isDelete = [self.db executeUpdate:@"delete from Person where id = ?",ID];
NSLog(@"%@",isDelete ? @"删除成功":@"删除失败");
}
//写一个修改人的接口
- (void)uodatePerson : (NSString *)age ByPersonID : (NSString *)ID{
BOOL isUpdate = [self.db executeUpdate:@"update Person set age = ? where id = ?",age,ID];
NSLog(@"%@",isUpdate ? @"修改成功":@"修改失败");
}
//写一个查询所有人的接口
- (NSMutableArray *)selectAllPersonFromPersonTable{
FMResultSet *set = [self.db executeQuery:@"select * from Person"];
NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];
while ([set next]) {
NSInteger ID = [set intForColumn:@"id"];
NSString *name = [set stringForColumn:@"name"];
NSInteger age = [set intForColumn:@"age"];
//创建Person对象存储信息
PersonModel *p = [[PersonModel alloc]init];
p.ID = [NSString stringWithFormat:@"%ld",ID];
p.name = name;
p.age = [NSString stringWithFormat:@"%ld",age];
//添加到数组
[array addObject:p];
[p release];
}
return array;
}
建一个model类
PersonModel.h
#import <Foundation/Foundation.h>
@interface PersonModel : NSObject
@property(nonatomic,copy)NSString *ID;
@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *age;
@end
PersonModel.m
#import "PersonModel.h"
@implementation PersonModel
- (void)dealloc
{
self.name = nil;
self.age = nil;
self.ID = nil;
[super dealloc];
}
@end
===============================测试调用===============================
配置显示:
布局预览:
提示:重在封装SQLite思想,不在效果,能有效调用即可!
DataBaseHandle.h
#import <Foundation/Foundation.h> @class PersonModel; @class FMDatabase; @interface DataBaseHandle : NSObject @property(nonatomic,retain)FMDatabase *db; //创建单例的的接口 + (DataBaseHandle *)shareDateBaseHandle; //创建一个Person表格 - (void)creatPersonTable; //插入person的方法 - (void)insertPersonTable : (PersonModel *)person; //写一个删除人的接口 - (void)deletePersonByPerssonID : (NSString *)ID; //写一个修改人的接口 - (void)uodatePerson : (NSString *)age ByPersonID : (NSString *)ID; //写一个查询所有人的接口 - (NSMutableArray *)selectAllPersonFromPersonTable; @end
DataBaseHandle.m
#import "DataBaseHandle.h"
#import "FMDB.h"
#import "PersonModel.h"
@implementation DataBaseHandle
- (void)dealloc
{
self.db = nil;
[super dealloc];
}
创建单例的的接口:
//创建单例对象使其存在于静态区 static DataBaseHandle *handle = nil; //创建单例的的借口 + (DataBaseHandle *)shareDateBaseHandle{ @synchronized(self){ if (handle == nil) { handle = [[DataBaseHandle alloc]init]; } } return handle; }
写一个私有的方法,返回数据库的路径
- (NSString *)dbpath{ return [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"db.sqlite"]; }
创建一个Person表格
//创建一个Person表格 - (void)creatPersonTable{ //初始化数据库对象 self.db = [FMDatabase databaseWithPath: [self dbpath]]; //打开数据库 BOOL isOpen = [self.db open]; if (isOpen) { NSLog(@"打开成功"); //创建表 BOOL isCreat = [self.db executeUpdate:@"create table if not exists Person(id integer primary key autoincrement,name text,gender text,age integer,salary integer)"]; NSLog(@"%@",isCreat ? @"创建成功":@"创建失败"); }else{ NSLog(@"打开失败"); } }
四种方法:增、删、改、查;
//插入person的方法
- (void)insertPersonTable : (PersonModel *)person{
BOOL isInsert = [self.db executeUpdate:@"insert into Person(name,age)values(?,?)",person.name,person.age];
NSLog(@"%@",isInsert ? @"插入成功":@"插入失败");
}
//写一个删除的接口
- (void)deletePersonByPerssonID : (NSString *)ID{
BOOL isDelete = [self.db executeUpdate:@"delete from Person where id = ?",ID];
NSLog(@"%@",isDelete ? @"删除成功":@"删除失败");
}
//写一个修改人的接口
- (void)uodatePerson : (NSString *)age ByPersonID : (NSString *)ID{
BOOL isUpdate = [self.db executeUpdate:@"update Person set age = ? where id = ?",age,ID];
NSLog(@"%@",isUpdate ? @"修改成功":@"修改失败");
}
//写一个查询所有人的接口
- (NSMutableArray *)selectAllPersonFromPersonTable{
FMResultSet *set = [self.db executeQuery:@"select * from Person"];
NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];
while ([set next]) {
NSInteger ID = [set intForColumn:@"id"];
NSString *name = [set stringForColumn:@"name"];
NSInteger age = [set intForColumn:@"age"];
//创建Person对象存储信息
PersonModel *p = [[PersonModel alloc]init];
p.ID = [NSString stringWithFormat:@"%ld",ID];
p.name = name;
p.age = [NSString stringWithFormat:@"%ld",age];
//添加到数组
[array addObject:p];
[p release];
}
return array;
}
建一个model类
PersonModel.h
#import <Foundation/Foundation.h>
@interface PersonModel : NSObject
@property(nonatomic,copy)NSString *ID;
@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *age;
@end
PersonModel.m
#import "PersonModel.h"
@implementation PersonModel
- (void)dealloc
{
self.name = nil;
self.age = nil;
self.ID = nil;
[super dealloc];
}
@end
===============================测试调用===============================
#import "FirstViewController.h" #import "DataBaseHandle.h" #import "PersonModel.h" @interface FirstViewController () @property(nonatomic,retain)NSMutableArray *dataSource;//接收查询的结果 @end @implementation FirstViewController - (void)dealloc { self.dataSource = nil; [super dealloc]; }
//懒加载 - (NSMutableArray *)dataSource{ if (_dataSource == nil) { self.dataSource = [NSMutableArray arrayWithCapacity:0]; } return [[_dataSource retain]autorelease]; }TEXT:
- (void)viewDidLoad { [super viewDidLoad]; //调用并验证 [[DataBaseHandle shareDateBaseHandle]creatPersonTable]; NSLog(@"%@",NSHomeDirectory()); PersonModel *p = [[PersonModel alloc]init]; p.name = @"小韩哥"; p.age = @"20"; //调用插入person的方法 // [[DataBaseHandle shareDateBaseHandle]insertPersonTable:p]; //接收数据库返回的查询结果 self.dataSource = [[DataBaseHandle shareDateBaseHandle]selectAllPersonFromPersonTable]; //调用删除人的方法 [[DataBaseHandle shareDateBaseHandle]deletePersonByPerssonID:@"9"]; }
配置显示:
#pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // Return the number of sections. return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // Return the number of rows in the section. return self.dataSource.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"firstcell" forIndexPath:indexPath]; PersonModel *p = self.dataSource[indexPath.row]; cell.textLabel.text = p.name; return cell; }
布局预览:
提示:重在封装SQLite思想,不在效果,能有效调用即可!
相关文章推荐
- iOS中 用FMDB封装一个SQLite数据库
- 查询练习mysql
- Redis Set命令
- 【Mysql学习笔记】DDL、DML、DCL区别
- Oracle中DBMS_JOB创建定时任务
- NoSQL生态系统(nosql ecosystem)
- mysql 函数大全
- 按照网上的资料进行的百万级循环插入的效率分析循环插入数据库90万条数据的代码
- 詩經甲骨文解讀:桑中(國風)
- MYSQL SQL表操作
- SQL Server 复制优化
- 超级简单的mysql主从数据库配置攻略以及错误处理
- SQL Server编程必知必会 -- (58-79 点总结)
- oracle returning into用法
- Oracle数据库
- 安装oracle时,检测系统要求时状态为错误的解决办法
- MongoDB安装及配置成服务
- memcache安装
- 多种的方法得到数据库的connection
- Ubuntu下mysql数据库自动备份脚本