zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

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

2023-09-27 14:26:37 时间
//写一个修改人的接口 - (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];


- (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;

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;//接收查询的结果

@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思想,不在效果,能有效调用即可!