您的位置:首页 > 数据库

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

2014-02-27 21:23 369 查看
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;
}


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

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

欢迎留言。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: