iOS开发-数据篇-sqlite存储

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

简介:iOS开发的持久化数据存储有4种方式:NSUserDefault和.plist、NSKeyedArchiver和NSKeyedUnarchiver、sqlite3数据库、CoreData。

sqlite3和CoreData适合存储大量数据(内容数据等),而另外两种适合存储简单数据(语言,字体,标记等简单数据存储)。

准备:这里主要介绍利用sqlite3封装的FMDatabase的数据库,(当然还有PlausibleDatabase、sqlitepersistentobjects等其他封装的库),导入需要依赖的libsqlite3.dylib包,FMDatabase已经根据工程不同情况兼容ARC和非ARC。为了只针对数据库进行讲解,直接创建一个简单工程,导入FMDatabase库。

内容:1.创建数据库

#import<UIKit/UIKit.h>#import"FMDatabase.h"#import"FMDatabaseQueue.h"@interfaceViewController : UIViewController{

FMDatabase*db;

FMDatabaseQueue*queue_db;

}

//创建数据库文件路径- (NSString*)getPath{

NSArray* paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) ;return[[paths objectAtIndex:0]stringByAppendingPathComponent:@"TEST.sqlite"] ;

}

2.数据库的建表-增-删-改操作

- (void)viewDidLoad {

[super viewDidLoad];

[self executeSql:[self createTable]];//创表[self executeSql:[self insertData]];//增[self executeSql:[self deleteData]];//删[self executeSql:[self setData]];//改//查[self queryData];//开辟多线程[NSThread detachNewThreadSelector:@selector(multipleThread) toTarget:self withObject:nil];

}

//创建数据库-(NSString *)createTable{

NSString*createSql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS TEST(a interger,b text)"];returncreateSql;

}//增- (NSString *)insertData{

NSString*insertSql=[NSString stringWithFormat:@"INSERT INTO '%@' ('%@', '%@') VALUES ('%@', '%@')",@"TEST",@"a",@"b", [NSNumber numberWithInt:1],@"宁波"];returninsertSql;

}//删- (NSString *)deleteData{

NSString*deleteSql = [NSString stringWithFormat:@"DELETE FROM '%@' where %@ = '%@'",@"TEST",@"b",@"宁波"];returndeleteSql;

}//改-(NSString *)setData{

NSString*setSql = [NSString stringWithFormat:@"UPDATE '%@' SET '%@' = '%@' WHERE '%@' = '%@'",@"TEST",@"b",@"象山",@"a", [NSNumber numberWithInt:1]];returnsetSql;

}

3.数据库的执行操作

//数据库执行操作-(BOOL)executeSql:(NSString *)sql{

db=[FMDatabase databaseWithPath:[self getPath]];

BOOL success;if([db open]) {

success=[db executeUpdate:sql];

}else{

NSLog(@"OPEN FAIL");

}

[db close];returnsuccess;

}

4.数据库的查询操作

//查-(void)queryData{if([db open]) {

NSString*querySql =[NSString stringWithFormat:@"SELECT * FROM %@",@"TEST"];

FMResultSet* rs =[db executeQuery:querySql];while([rs next]) {inta = [rs intForColumn:@"a"];

NSString*b = [rs stringForColumn:@"b"];

NSLog(@"a:%d == b:%@",a,b);

}

[db close];

}

}

5.数据库的多线程操作

若在多线程的环境下,不能在多线程中共用同一个FMDatabase进行数据访问,会造成数据混乱,多线程下不能用单例对象,这时得依靠FMDatabaseQueue。

//多线程下使用FMDatabaseQueue进行数据库操作-(void)multipleThread{

queue_db=[FMDatabaseQueue databaseQueueWithPath:[self getPath]];

@autoreleasepool{

[queue_db inDatabase:^(FMDatabase *db2) {

[db2 executeUpdate:[self insertData]];

[self queryData];

}];

}

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航