/Users/apple/Library/Application Support/iPhone Simulator/6.0/Applications
/Users/用户名/资源库/Application Support/iPhone Simulator/6.1/Applications
NSString *home = NSHomeDirectory();
NSString *home = NSHomeDirectory(); NSString *documents = [home stringByAppendingPathComponent:@"Documents"]; // 不建议采用,因为新版本的操作系统可能会修改目录名
// NSUserDomainMask 代表从用户文件夹下找 // YES 代表展开路径中的波浪字符“~” NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, NO); // 在iOS中,只有一个目录跟传入的参数匹配,所以这个集合里面只有一个元素 NSString *documents = [array objectAtIndex:0];
NSString *tmp= NSTemporaryDirectory();
// 将数据封装成字典 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject:@"15013141314" forKey:@"phone"]; [dict setObject:@"27" forKey:@"age"]; // 将字典持久化到Documents/stu.plist文件中 [dict writeToFile:path atomically:YES];
// 读取Documents/stu.plist的内容,实例化NSDictionary NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; NSLog(@"phone:%@", [dict objectForKey:@"phone"]); NSLog(@"age:%@", [dict objectForKey:@"age"]);
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:@"Cat" forKey:@"username"]; [defaults setFloat:14.0f forKey:@"text_size"]; [defaults setBool:YES forKey:@"auto_login"];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *username = [defaults stringForKey:@"username"]; float textSize = [defaults floatForKey:@"text_size"]; BOOL autoLogin = [defaults boolForKey:@"auto_login"];
[defaults synchornize];
NSString *path = [NSString stringWithFormat:@"Documents/array.archive"]; NSArray *array = [NSArray arrayWithObjects:@"a",@"b",nil]; [NSKeyedArchiver archiveRootObject:array toFile:path];
NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
@interface Person : NSObject <NSCoding> @property(nonatomic,copy) NSString *name; @property(nonatomic,assign) int age; @property(nonatomic,assign) float height;@end
@implementation Person
-(void)encodeWithCoder:(NSCoder*)encoder{
[encoder encodeObject:self.name forKey:@"name"];
[encoder encodeInt:self.age forKey:@"age"];
[encoder encodeFloat:self.height forKey:@"height"];
}
-(id)initWithCoder:(NSCoder*)decoder {
self.name= [decoder decodeObjectForKey:@"name"];
self.age= [decoder decodeIntForKey:@"age"];
self.height= [decoder decodeFloatForKey:@"height"];
return self;
}
// 归档(编码)
Person *person = [[Person alloc] init];
person.name = @"JN";
person.age = 22;
person.height = 1.63f;
[NSKeyedArchiver archiveRootObject:person toFile:path];
// 恢复(解码)
Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
@end
// 新建一块可变数据区 NSMutableData *data = [NSMutableData data]; // 将数据区连接到一个NSKeyedArchiver对象 NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease]; // 开始存档对象,存档的数据都会存储到NSMutableData中 [archiver encodeObject:person1 forKey:@"person1"]; [archiver encodeObject:person2 forKey:@"person2"]; // 存档完毕(一定要调用这个方法) [archiver finishEncoding]; // 将存档的数据写入文件 [data writeToFile:path atomically:YES];
// 从文件中读取数据 NSData *data = [NSData dataWithContentsOfFile:path]; // 根据数据,解析成一个NSKeyedUnarchiver对象 NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; Person *person1 = [unarchiver decodeObjectForKey:@"person1"]; Person *person2 = [unarchiver decodeObjectForKey:@"person2"]; // 恢复完毕[unarchiver finishDecoding];
// 临时存储person1的数据 NSData *data = [NSKeyedArchiver archivedDataWithRootObject:person1]; // 解析data,生成一个新的Person对象 Student *person2 = [NSKeyedUnarchiver unarchiveObjectWithData:data]; // 分别打印内存地址 NSLog(@"person1:%@", person1); // person1:0x8d3ed10> NSLog(@"person2:%@", person2); // person2:0x8d3e2f0>
create table if not exists t_student (id integer, name text, age inetger, score real) ;
drop table if exists t_student;
insert into t_student (name, age) values ('JN', 22) ;
pupdate t_student set name = 'jack', age = 20 ;
delete from t_student;
// 将t_student表中年龄大于10 并且 姓名不等于jack的记录,年龄都改为 5 update t_student set age = 5 where age > 10 and name != ‘jack' ; // 删除t_student表中年龄小于等于10 或者 年龄大于30的记录 delete from t_student where age <= 10 or age > 30 ;
select * from t_student where age > 10 ; // 条件查询条件语句:
// path为:~/Documents/person.db sqlite3 *db;int result = sqlite3_open([path UTF8String], &db);
char *errorMsg; // 用来存储错误信息 char *sql = "create table if not exists t_person(id integer primary key autoincrement, name text, age integer);"; int result = sqlite3_exec(db, sql, NULL, NULL, &errorMsg);
1.打开数据库 int sqlite3_open( const char *filename, // 数据库的文件路径 sqlite3 **ppDb // 数据库实例 ); 2.执行任何SQL语句 int sqlite3_exec( sqlite3*, // 一个打开的数据库实例 const char *sql, // 需要执行的SQL语句 int (*callback)(void*,int,char**,char**), // SQL语句执行完毕后的回调 void *, // 回调函数的第1个参数 char **errmsg // 错误信息 ); 3.检查SQL语句的合法性(查询前的准备) int sqlite3_prepare_v2( sqlite3 *db, // 数据库实例 const char *zSql, // 需要检查的SQL语句 int nByte, // SQL语句的最大字节长度 sqlite3_stmt **ppStmt, // sqlite3_stmt实例,用来获得数据库数据 const char **pzTail ); 4.查询一行数据 int sqlite3_step( sqlite3_stmt*); // 如果查询到一行数据,就会返回SQLITE_ROW 5.利用stmt获得某一字段的值(字段的下标从0开始) double sqlite3_column_double(sqlite3_stmt*, int iCol); // 浮点数据 int sqlite3_column_int(sqlite3_stmt*, int iCol); // 整型数据 sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); // 长整型数据 const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); // 二进制文本数据 const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); // 字符串数据
// 从应用程序包中加载模型文件
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];
// 传入模型,初始化
NSPersistentStoreCoordinator NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
// 构建SQLite文件路径
NSString *docs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];NSURL *url = [NSURL fileURLWithPath:[docs stringByAppendingPathComponent:@"person.data"]];
// 添加持久化存储库,这里使用SQLite作为存储库
NSError *error = nil;
NSPersistentStore *store = [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error];
if (store == nil) { // 直接抛异常
[NSException raise:@"添加数据库错误" format:@"%@", [error localizedDescription]];
}
// 初始化上下文,设置persistentStoreCoordinator属性
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];context.persistentStoreCoordinator = psc;
// 用完之后,还是要[context release];
/*持久化存储库的类型:NSSQLiteStoreType SQLite数据库
NSBinaryStoreType 二进制平面文件
NSInMemoryStoreType 内存库,无法永久保存数据
虽然这3种类型的性能从速度上来说都差不多,但从数据模型中保留下来的信息却不一样
在几乎所有的情景中,都应该采用默认设置,使用SQLite作为持久化存储库
*/
// 传入上下文,创建一个Person实体对象
NSManagedObject *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context];
// 设置简单属性
[person setValue:@"JN" forKey:@"name"];
[person setValue:[NSNumber numberWithInt:22] forKey:@"age"];
// 传入上下文,创建一个Card实体对象
NSManagedObject *card = [NSEntityDescription insertNewObjectForEntityForName:@"Card" inManagedObjectContext:context];
[card setValue:@"447640819" forKey:@"no"];
// 设置Person和Card之间的关联关系
[person setValue:card forKey:@"card"];
// 利用上下文对象,将数据同步到持久化存储库
NSError *error = nil;BOOL success = [context save:&error];
if (!success) {
[NSException raise:@"访问数据库错误" format:@"%@", [error localizedDescription]];
}
// 如果是想做更新操作:只要在更改了实体对象的属性后调用[context save:&error],就能将更改的数据同步到数据库
// 初始化一个查询请求
NSFetchRequest *request = [[NSFetchRequest alloc] init];
// 设置要查询的实体
NSEntityDescription *desc = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:context];
// 设置排序(按照age降序)
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
request.sortDescriptors = [NSArray arrayWithObject:sort];
// 设置条件过滤(name like '%JN-1%')
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name like %@", @"*JN-1*"];
request.predicate = predicate;
注意:设置条件过滤时,数据库里面的%要用*来代替
// 执行请求
NSError *error = nil;
NSArray *objs = [context executeFetchRequest:request error:&error];
if (error) {
[NSException raise:@"查询错误" format:@"%@", [error localizedDescription]];
}
// 遍历数据
for (NSManagedObject *obj in objs) {
NSLog(@"name=%@", [obj valueForKey:@"name"]
}
// 传入需要删除的实体对象
[context deleteObject:managedObject];
// 将结果同步到数据库NSError *error = nil;
[context save:&error];
if (error) {
[NSException raise:@"删除错误" format:@"%@",[error localizedDescription]];
}
// 那么生成一个Person实体对象就应该这样写 Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context]; person.name = @"JN";person.age = [NSNumber numberWithInt:24]; Card *card = [NSEntityDescription insertNewObjectForEntityForName:@”Card" inManagedObjectContext:context]; card.no = @”447640819"; person.card = card;
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有