ios 本地存储 (2)数据库存储
2014-02-27 21:23
369 查看
ios 数据库存储,是工作中和项目中最容易的遇到的存储类型,我们对于用户的信息等一些需要长期存储的数据,都要放在本地进行存储。下面就来介绍一下数据库的存储方法。
在这之前,我们需要下载火狐浏览器,在火狐浏览器中,我们要用到火狐浏览器的工具中的SQLite Manager来创建我们的数据库,在这里就不介绍了,我们从数据库的操作开始介绍。
1.对数据库进行第一步操作——copy路径,找到数据库所存储的路径:
2.自定义model,通过model存储数据:
.h文件:
.m文件:
下面我们来对数据库内容进行操作:
查找所有人员信息:
通过人员id号进行查找:
添加数据:
通过人员的id号来对人员的名字进行修改:
通过对人员的id号来删除某一位成员:
我们可以通过tableview调用自定义的model来对数据进行操作:
这样,我们就可以显示数据库中人员的信息了。
其实,数据库操作无非是增删改查四种操作。只要了解具体的方法,就可以游刃有余。
欢迎留言。
在这之前,我们需要下载火狐浏览器,在火狐浏览器中,我们要用到火狐浏览器的工具中的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; }
这样,我们就可以显示数据库中人员的信息了。
其实,数据库操作无非是增删改查四种操作。只要了解具体的方法,就可以游刃有余。
欢迎留言。
相关文章推荐
- iOS开发-------FMDB实现本地存储简易通讯录
- 理一下iOS本地持久化储存(侧重数据库SQLite)
- IOS中NSUserDefaults的用法(轻量级本地数据存储) (转)
- iOS本地数据安全存储
- IOS-本地存储-NSUserDefaults
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- iOS查看手机app本地存储的文件
- ios 本地存储文件夹的使用注意
- IOS中NSUserDefaults的用法(轻量级本地数据存储) (转)
- Html5 学习系列(六)Html5本地存储和本地数据库
- iOS本地数据存储的方式
- IOS中的本地存储
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- 苹果iOS 5限制应用本地存储问题
- iOS本地数据存储(转载)
- iOS-UI篇-头像本地文件存储
- iOS 读取URL图片并存储到本地
- iOS视频压缩存储至本地并上传至服务器
- [ios2]苹果iOS 5限制应用本地存储问题 【转】