iOS中 用FMDB封装一个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; 
}

来自:http://blog.csdn.net/qq_31810357/article/details/49181453

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/3352.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论