ios 本地存储 (2)数据库存储

ios 数据库存储,是工作中和项目中最容易的遇到的存储类型,我们对于用户的信息等一些需要长期存储的数据,都要放在本地进行存储。下面就来介绍一下数据库的存储方法。

在这之前,我们需要下载火狐浏览器,在火狐浏览器中,我们要用到火狐浏览器的工具中的SQLite Manager来创建我们的数据库,在这里就不介绍了,我们从数据库的操作开始介绍。

 1.对数据库进行第一步操作——copy路径,找到数据库所存储的路径:

 /*对数据库进行操作:
 *1.copy路径
 *2.获取数据库指针
 *(如果数据库建立错误,需要修改boundel里面的数据库,并将doucument里面的数据库删除  重新建立)
 */

+(sqlite3 *)openDatabase{
    if (dbPoint) {
        return dbPoint;
    }
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);//获取文件地址
    NSString *path = [paths lastObject];
    NSString *realpath = [NSString stringWithFormat:@"%@/dongdong",path];//拼接文件地址
    
    NSError *error = nil;
    if (![[NSFileManager defaultManager] fileExistsAtPath:realpath]) {
        NSString *source = [[NSBundle mainBundle]pathForResource:@"Company" ofType:@"sqlite"];//获取要拷贝的文件地址
        [[NSFileManager defaultManager] copyItemAtPath:source toPath:realpath error:&error];//拷贝路径
        if (error) {
            NSLog(@"error == %@",error);
        }
    }
    sqlite3_open([realpath UTF8String], &dbPoint);//打开文件
    return dbPoint;
}

+(void)closeDB{
    sqlite3_close(dbPoint);
}

2.自定义model,通过model存储数据:

.h文件:

#import <Foundation/Foundation.h>

@interface peopleModel : NSObject

@property (copy,nonatomic) NSString *workername; //定义的数据库中的人员名字
@property (assign,nonatomic) int workerid;       //人员id号
@property (copy,nonatomic) NSString *worksex;    //人员性别
@property (assign,nonatomic) CGFloat workerscore;//人员得分

+(id)modelWithWorkername:(NSString *)workername Workerid:(int)workerid Workersex:(NSString *)workersex Workerscore:(CGFloat)workerscore;

@end

.m文件:

#import "peopleModel.h"

@implementation peopleModel
- (void)dealloc
{
    [_workername release];
    [_worksex release];
    _workername = Nil;
    _worksex = Nil;
    [super dealloc];
}
- (id)initWithWorkername:(NSString *)workername Workerid:(int)workerid Workersex:(NSString *)workersex Workerscore:(float)workerscore
{
    self = [super init];
    if (self) {
        self.workername = workername;
        self.workerid = workerid;
        self.workerscore = workerscore;
        self.worksex = workersex;
    }
    return self;
}
//遍历构造器方法
 +(id)modelWithWorkername:(NSString *)workername Workerid:(int)workerid Workersex:(NSString *)workersex Workerscore:(float)workerscore{
    peopleModel *model = [[peopleModel alloc]initWithWorkername:workername Workerid:workerid Workersex:workersex Workerscore:workerscore];
    return [model autorelease];
    
}
-(NSString *)description{
    NSString *str = [NSString stringWithFormat:@"id == %d,name == %@,sex == %@,score == %f",self.workerid,self.workername,self.worksex,self.workerscore];
    return str;
}
@end

下面我们来对数据库内容进行操作:

查找所有人员信息:

+(NSArray *)findAllPerson{
    sqlite3 *dbPoint = [DB openDatabase];//获得数据库指针
    
    sqlite3_stmt *stmt;    //创建数据库替身
    //创建数据库语句并检查数据库语句
    
    int result = sqlite3_prepare(dbPoint, "select workername,workerid,workersex,workerscore from Lanou", -1, &stmt, NULL);
    
    
    if (SQLITE_OK == result) {//判断数据库语句是否正确
        NSMutableArray *people = [NSMutableArray array];
        while (sqlite3_step(stmt) == SQLITE_ROW) {//执行数据库操作并判断是否有下一条数据
            const unsigned char *name = sqlite3_column_text(stmt, 0);//查询出 数据库当前行的第几列,其中第二个参数0代表数据库语句中的查找顺序
            int workerid = sqlite3_column_int(stmt, 1);
            const unsigned char *sex = sqlite3_column_text(stmt, 2);
            float workerscore = sqlite3_column_double(stmt, 3);
            NSString *workername = [NSString stringWithUTF8String:(const char *)name];;
            NSString *workersex = [NSString stringWithUTF8String:(const char *)sex];
            
            peopleModel *model = [peopleModel modelWithWorkername:workername Workerid:workerid Workersex:workersex Workerscore:workerscore];
            [people addObject:model];
        }
        sqlite3_finalize(stmt);//清除内存
        return people;
    }
    return [NSArray array];
}

通过人员id号进行查找:

//条件查找
+(peopleModel *)findmodelwithid:(NSInteger)workid{
    sqlite3 *dbPoint = [DB openDatabase];
    sqlite3_stmt *stmt;
    int result = sqlite3_prepare(dbPoint, "select workerid,workername,workersex,workerscore from Lanou where workerid = ?", -1, &stmt, NULL);
    // 绑定sql语句的问号
    sqlite3_bind_int(stmt, 1, workid);
    if (SQLITE_OK == result) {
        if (sqlite3_step(stmt) == SQLITE_ROW) {
            const unsigned char *name = sqlite3_column_text(stmt, 1);
            int workerid = sqlite3_column_int(stmt, 0);
            const unsigned char *sex = sqlite3_column_text(stmt, 2);
            float workerscore = sqlite3_column_double(stmt, 3);
            NSString *workername = [NSString stringWithUTF8String:(const char *)name];;
            NSString *workersex = [NSString stringWithUTF8String:(const char *)sex];
            
            peopleModel *peoplemodel = [peopleModel modelWithWorkername:workername Workerid:workerid Workersex:workersex Workerscore:workerscore];
            sqlite3_finalize(stmt);//清除内存
            return peoplemodel;
        }
    }
    return Nil;
}

添加数据:

//添加数据
+(BOOL)insertIntoCompany:(peopleModel *)model{
    sqlite3 *dbPoint = [DB openDatabase];//获得数据库指针
    sqlite3_stmt *stmt;//创建数据库替身
    int result = sqlite3_prepare(dbPoint, "insert into Lanou values(?,?,?,?)", -1, &stmt, NULL);
    sqlite3_bind_int(stmt, 1, model.workerid);
    sqlite3_bind_text(stmt, 2, [model.workername UTF8String], -1, NULL);
    sqlite3_bind_text(stmt, 3, [model.worksex UTF8String], -1, NULL);
    sqlite3_bind_double(stmt, 4, model.workerscore);
    
    if (SQLITE_OK == result) {
        if (sqlite3_step(stmt) == SQLITE_DONE) {
            
            return YES;
        }
    }
    return NO;
}

通过人员的id号来对人员的名字进行修改:

+(BOOL)updateIntoCompanyWithid:(NSInteger)workerid workername:(NSString *)name{
    sqlite3 *dbPoint = [DB openDatabase];
    sqlite3_stmt *stmt;
    int result = sqlite3_prepare(dbPoint, "update Lanou set workername = ? where workerid = ?", -1, &stmt, NULL);
    sqlite3_bind_text(stmt, 1, [name UTF8String], -1, NULL);
    sqlite3_bind_int(stmt, 2, workerid);
    if (SQLITE_OK == result) {
        if (sqlite3_step(stmt) == SQLITE_DONE) {
            return YES;
        }
    }
    return NO;
}

通过对人员的id号来删除某一位成员:

+(BOOL)deleteIntoCompanyWithid:(NSInteger)workerid{
    sqlite3 *dbPont = [DB openDatabase];
    sqlite3_stmt *stmt;
    int result = sqlite3_prepare(dbPont, "delete from Lanou where workerid = ?", -1, &stmt, NULL);
    sqlite3_bind_int(stmt, 1, workerid);
    if (result == SQLITE_OK) {
        if (sqlite3_step(stmt) == SQLITE_DONE) {
            return YES;
        }
    }
    return NO;
}

我们可以通过tableview调用自定义的model来对数据进行操作:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return _tablearray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *indentify = @"cell";
    PeopleCell *cell = [tableView dequeueReusableCellWithIdentifier:indentify];
    if (!cell) {
        cell = [[[PeopleCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indentify] autorelease];
    }
    peopleModel *model = [_tablearray objectAtIndex:indexPath.row];
    [cell.workername setText:model.workername];
    [cell.workersex setText:model.worksex];
    [cell.workerscore setText:[NSString stringWithFormat:@"%f",model.workerscore]];
    return cell;
}

这样,我们就可以显示数据库中人员的信息了。

其实,数据库操作无非是增删改查四种操作。只要了解具体的方法,就可以游刃有余。

欢迎留言。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值