用户信息类:
#import#import //用户数据信息@interface UserInfo : NSObject//用户名@property (retain,nonatomic) NSString* mName ;//用户ID@property (retain,nonatomic) NSString* mUserID ;//年龄@property (assign,nonatomic) int mAge ;//邮件@property (retain,nonatomic) NSString* mEMail ;//用户头像图像文件@property (retain,nonatomic) UIImage* mImage ;@end#import "UserInfo.h"@implementation UserInfo@end
数据库管理类:
#import#import "UserInfo.h"//数据库管理类@interface FMDBMgr : NSObject{ //数据数组 NSMutableArray* _arrayUsers ;}//打开数据库文件-(BOOL) openFMDB ;//将数组写入到数据库中-(void) saveFMDB ;//插入一条数据到数据库-(BOOL) insertUserToDB:(UserInfo*) user ;//插入数据到内存中-(void) insertUser:(UserInfo*) user ;//从数据库中删除-(BOOL) deleteUserFromDB:(UserInfo*) user ;//从数据内存中删除-(void) deleteUser:(UserInfo*) user ;//更新用户数据-(BOOL) updateInDB:(UserInfo*) user ;//更新数组中的数据-(BOOL) updateUser:(UserInfo*) user ;//返回数据库中的所有用户数据-(NSArray*) selectAllFromDB ;//返回内存数组中的数据-(NSArray*) getAllUsers ;@end#import "FMDBMgr.h"#import "FMDatabase.h"/* 对于FMDB目录中的这三个文件做下功能描述: FMDatabase : 创建SQLite数据库 FMResultSet :获取执行sql查询后的结果集 FMDatabaseQueue :在多个线程执行查询和更新时会使用这个类。 */@implementation FMDBMgr-(id) init{ self = [super init] ; if (self) { _arrayUsers = [[NSMutableArray alloc] init] ; } return self ;}// 打开数据库-(BOOL) openFMDB{ NSString* strPath = [NSHomeDirectory() stringByAppendingString:@"/tmp/FMDB.db"]; //只要数据库的路径地址相同 //fmdb操作的是同一个数据库 FMDatabase* fmdb = [[FMDatabase alloc] initWithPath:strPath] ; NSString* strCreate = @"create table if not exists UserTB(ID integer primary key autoincrement,Name varchar(128),UserID varchar(128),Age smallint,imagePath varchar(1024));"; BOOL isOpen = [fmdb open] ;// [fmdb close]; BOOL isCreate = [fmdb executeUpdate:strCreate] ; //是否创建成功 return isCreate;}-(void) insertUser:(UserInfo *)user{ //添加时,有可能添加多个相同的元素 [_arrayUsers addObject:user] ;}-(void) deleteUser:(UserInfo *)user{ //[_arrayUsers removeObject:user] ; for (int i = 0 ; i < _arrayUsers.count; i++) { UserInfo* u = _arrayUsers[i] ; if ([u.mUserID isEqualToString:user.mUserID]) { [_arrayUsers removeObjectAtIndex:i] ; } }}//更新数据-(BOOL) updateUser:(UserInfo *)user{ BOOL isUpdate = NO ; for (int i = 0 ; i < _arrayUsers.count; i++) { UserInfo* u = _arrayUsers[i] ; if ([u.mUserID isEqualToString:user.mUserID]) { isUpdate = YES ; [_arrayUsers replaceObjectAtIndex:i withObject:user] ; } } return isUpdate ;}//插入到数据库-(BOOL) insertUserToDB:(UserInfo *)user{ BOOL isInsert = NO ; NSString* strPath = [NSHomeDirectory() stringByAppendingString:@"/tmp/FMDB.db"]; //只要数据库的路径地址相同 //fmdb操作的是同一个数据库 FMDatabase* fmdb = [[FMDatabase alloc] initWithPath:strPath] ; [fmdb open] ; //先要查询数据库中是否有相同 userID的用户 NSString* strQuery = @"select * from UserTB where UserID = ?;"; FMResultSet* set = [fmdb executeQuery:strQuery,user.mUserID] ; //如果第一条数据没有结果 //没有任何数据 if ([set next] == NO) { NSString* strInsert = @"insert into UserTB(Name,UserID,Age,ImagePath)" " Values(?,?,?,?);" ; // user.mImage ; //将JPG格式的图片转化为NSData二进制格式 //参数一:image对象指针,内存格式要求为JPG //参数二:将JPG格式转化为文件时的压缩比例 //比例范围0~1,值越小,压缩比越大,文件越小,质量越低 //值越大,压缩比越低,文件越大,质量越高 //返回值时转化过的数据文件 //如果格式不正确:返回值为nil NSData* iData = UIImageJPEGRepresentation(user.mImage, 1) ; if (iData == nil) { //使用png格式转化 //png无压缩格式 iData = UIImagePNGRepresentation(user.mImage) ; if (iData == nil) { NSLog(@"图像有误!"); return NO ; } } //获得数据库中最后一条行数据的ID NSInteger lastCount = [fmdb lastInsertRowId] ; lastCount++ ; static int count = 0 ; count++ ; NSString* imagePath = [NSString stringWithFormat:@"%@/%@/image_%d.pic",NSHomeDirectory(),@"tmp",count] ; // user.mImage ; // NSLog(@"ipath = %@",imagePath) ; //写入到文件中 BOOL isWrite = [iData writeToFile:imagePath atomically:YES] ; if (isWrite == NO) { NSLog(@"写入图片失败!"); } //执行插入操作 isInsert = [fmdb executeUpdate:strInsert,user.mName, user.mUserID, [NSNumber numberWithInt:user.mAge],imagePath] ; //isInsert = YES ; } return isInsert ;}@end
使用:
#import "ViewController.h"#import "FMDBMgr.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.}-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ FMDBMgr* mgr = [[FMDBMgr alloc] init] ; [mgr openFMDB] ; static int count = 1 ; UserInfo* uInfo = [[UserInfo alloc] init] ; uInfo.mAge = 20+count ; uInfo.mName = [NSString stringWithFormat:@"name %d",count] ; uInfo.mEMail =@"12345555@qq.com" ; uInfo.mUserID = [NSString stringWithFormat:@"%d",count] ; NSString* iName = [NSString stringWithFormat:@"17_%d.jpg",count%15+1] ; uInfo.mImage = [UIImage imageNamed:iName] ; count++ ; BOOL isOK = [mgr insertUserToDB:uInfo] ; NSLog(@"OK = %d",isOK) ;}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
参考文章:http://techblog.youdao.com/?p=1023