iOS中 用FMDB封装一个SQLite数据库

2021-10-29 14:03:27 浏览数 (1)

建立一个单例:

DataBaseHandle.h

代码语言:javascript复制
#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</pre> 

 
 DataBaseHandle.m  
   
#import "DataBaseHandle.h"
#import "FMDB.h"
#import "PersonModel.h"
@implementation DataBaseHandle 
(void)dealloc
{
  self.db = nil;
  [super dealloc];
}</pre> 
 
  
 创建单例的的接口:  
//创建单例对象使其存在于静态区
static DataBaseHandle *handle = nil;
//创建单例的的借口 
(DataBaseHandle *)shareDateBaseHandle{
@synchronized(self){

  if (handle == nil) {
      handle = [[DataBaseHandle alloc]init]; 



    }
}
return handle;
 
}</pre>
 写一个私有的方法,返回数据库的路径 
- (NSString *)dbpath{
    return [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"db.sqlite"];
}</pre> 


 创建一个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(@"打开失败");
 
}
}</pre> 

 四种方法:增、删、改、查; 
   
//插入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;
}</pre> 

 建一个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</pre> 

 ===============================测试调用===============================

 
#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];
}</pre> 

 
//懒加载 
(NSMutableArray *)dataSource{
  if (_dataSource == nil) {

  self.dataSource = [NSMutableArray arrayWithCapacity:0];
 
}
return [[_dataSource retain]autorelease];
}</pre> 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"];
 

}</pre> 

 配置显示:


#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;
}</pre> 

0 人点赞