简单的数据存储——plist、NSKeyedArchiver归档、NSUserDefaults(偏好设置)、SQLite(嵌入式数据库)

数据存储的五种方法:

1、xml属性列表(plist归档)

2、NSKeyedArchiver归档(加密形式)

3、NSUserDefaults(偏好设置)

4、SQLite(嵌入式数据库)

5、Core Date(面向对象方式的嵌入式数据库)

一、plist的读写

缺点:

1、明文保存

2、操作对象有限只有NSArray、NSMutableArray、NSDictionary、NSMutableDictionary支持

(归档时只要调用对应的writeToFile方法即可,解档调用arrayWithContentsOfFile或dictionaryWithContentsOfFile)

写:

1、//获取到Document文件路径

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString *path = paths[0];

2、//创建plist文件

NSString *filename = [path stringByAppendingPathComponent:@“test.plist”];

3、//建立Dictionary或者NSArray写入

NSDictionary *dic1 = @{@“name”:@“zhang”,@“age”:@22,@“sex”:@“man”};

NSDictionary *dic2 = @{@“name”:@“li”,@“age”:@54,@“sex”:@“female”};

NSDictionary *dic3 = @{@“name”:@“wang”,@“age”:@25,@“sex”:@“man”};

NSDictionary *dic = @{@“z”:dic1,@“l”:dic2,@“w”:dic3};

4、//写入到test.plist中

[dic writeToFile:filename atomically:YES];

读:

1、//获取到Document文件路径

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString *path = paths[0];

2、//plist文件

NSString *filename = [path stringByAppendingPathComponent:@“test.plist”];

3、//读

NSDictionary *readDic = [NSDictionary dictionaryWithContentsOfFile:filename];

NSDictionary *person = readDic[@“z”];

NSString *name = person[@“name”];

二、NSKeyedArchiver归档(加密形式)

分为简单归档(针对单个对象,不用设置key)和复杂对象归档(针对多个对象,需要设置不同的key)

OS X为:NSArchiver 和  NSUnarchiver

iOS 为:NSKeyedArchiver 和  NSKeyedUnarchiver

1、简单归档:

NSString *str = @“hello”;

//要归档的内容

//也可以是NSArray *array = @[@“a”,@“b”,@“c”];

NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString *path = array[0];

NSString *filename = [path stringByAppendingPathComponent:@"test.arc"];

//获得路径

if(![NSKeyArchiver archiveRootObject:str toFile:filename])

{

NSLog(@“archiver failed!”);

}

//归档

(id) st = [NSKeyedUnarchiver unarchiverObjectWithFile:filename];

//解档

//(上面的id指任意的对象,可以是NSString,也可以是NSArray);

2、复杂对象归档(多对象归档)

//存档地址

NSString *filename2 = [path stringByAppendingPathComponent:@"test2.arc"];

归档:

//设置数据

int myInt = 31;

NSString *myString = @"hello”;

NSNumber *myNumber = @32;

NSArray *myArray = @[@"ok",@"no",@"byel"];

NSDictionary *myDic = @{@"dic1":@"a",@"dic2":@"b",@"dic3":@"c"};

//新建临时存放数据的data

NSMutableData *data = [[NSMutableData alloc]init];

//设置存档保存在data对象中

NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

//对对象进行归档,并设置key以便读取

[archiver encodeInt:myInt forKey:@"int"];

[archiver encodeObject:myString forKey:@"string"];

[archiver encodeObject:myNumber forKey:@"number"];

[archiver encodeObject:myArray forKey:@"array"];

[archiver encodeObject:myDic forKey:@"dictionary"];

//结束存档

[archiver finishEncoding];

//写入文件

[data writeToFile:filename2 atomically:YES];

读档:

//定义数据

int myInt2;

NSString *myString2;

NSNumber *myNumber2;

NSArray *myArray2;

NSDictionary *myDic2;

//获取到文件,存放在data2中

NSMutableData *data2 = [[NSMutableData alloc]initWithContentsOfFile:filename2];

//定义解档data2

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data2];

//解档并存放在变量中

myInt2 = [unarchiver decodeIntForKey:@"int"];

myString2 = [unarchiver decodeObjectForKey:@"string"];

myNumber2 = [unarchiver decodeObjectForKey:@"number"];

myArray2 = [unarchiver decodeObjectForKey:@"array"];

myDic2 = [unarchiver decodeObjectForKey:@"dictionary"];

//结束解档

[unarchiver finishDecoding];

三、NSUserDefaults

NSUserDefaults支持的数据类型有:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL.

1、存数据:

//将NSString 对象存储到 NSUserDefaults 中

NSString *passWord = @"1234567";

NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

[user setObject:passWord forKey:@"userPassWord"];

2、取数据

NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

NSString *passWord = [ user objectForKey:@"userPassWord"];

//存自定义的数据用NSData

四、SQLite数据库

特点:

1、在iOS中需要使用C语言语法进行数据库操作、访问(无法使用ObjC直接访问,因为libsqlite3框架基于C语言编写)

2、建立连接后通常不需要关闭连接(可以手动关闭)

步骤:(先导入libsqlite3框架)

1、打开数据库。

//用sqlite_open()打开数据库会指定一个数据库文件保存路径,如果文件存在则直接打开,否则创建并打开。(打开数据库会得到一个sqlite3类型的对象,后面需要借助这个对象进行其他操作)

2、执行SQL语句。

执行SQL语句包括有返回值的语句和无返回值语句。

(1)、对于有返回值的语句(如增删改等操作)直接通过sqlite3_exec()函数执行;

(2)、对于有返回值的语句(如查询操作)则首先通过sqlite3_prepare_v2()执行语法检测,然后通过sqlite3_step()依次取出查询结果的每一行数据,对于每行数据都可以通过对应的sqlite_column_类型名()方法获得对应列的数据,如此反复循环直到遍历完成。最后通过sqlite3_finalize()释放。

代码:

1、创建数据库

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];

NSString *filename = [path stringByAppendingPathComponent:dbName];

2、打开数据库并判断是否打开

if (sqlite3_open([filename UTF8String], &database) == SQLITE_OK) {

NSLog(@"database open success");

}

else{

NSLog(@"database open failure");

}

3、处理一个没有返回值的sql语句(如增删改)

if (sqlite3_exec(database, [sql UTF8String], nil, nil, &error) != SQLITE_OK){

NSLog(@"%s",error);

}

4、处理一个有返回值的sql语句(如查询)

-(NSArray *)executeQuery:(NSString *)sql{

NSMutableArray *array = [[NSMutableArray alloc]init];

sqlite3_stmt *stmt;

int result = sqlite3_prepare_v2(database, [sql UTF8String], -1, &stmt, NULL);

if (result == SQLITE_OK) {

while (sqlite3_step(stmt) == SQLITE_ROW) {

NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];

for (int i = 0; i < sqlite3_column_count(stmt); i ++) {

NSString *columnName =[NSString stringWithUTF8String:sqlite3_column_name(stmt, i)];

NSString *value=[NSString stringWithUTF8String:(char *)sqlite3_column_text(stmt, i)];

dic[columnName] = value;

}

[array addObject:dic];

}

}

return array;

}

5、关闭数据库

if(sqlite3_close(database) != SQLITE_OK){

NSLog(@"%s",sqlite3_errmsg(database));

}

时间: 2024-10-06 16:28:10

简单的数据存储——plist、NSKeyedArchiver归档、NSUserDefaults(偏好设置)、SQLite(嵌入式数据库)的相关文章

iOS中的数据存储 NSUserDefault NSKeyedArchiver(归档和反归档)

应用沙盒: 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录)与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒. 模拟器应用沙盒的根路径在: (apple是用户名, 6.0是模拟器版本) /Users/apple/Library/Application Support/iPhone Simulator/6.0/Applications 或者: /Users/用户名/资源库/Application Support/iPhone Simulator/6.1/Applic

IOS 数据存储(NSKeyedArchiver 归档篇)

什么是归档 当遇到有结构有组织的数据时,比如字典,数组,自定义的对象等在存储时需要转换为字节流NSData类型数据,再通过写入文件来进行存储. 归档的作用 之前将数据存储到本地,只能是字符串.数组.字典.NSNuber.BOOL等容器类对象,不能将自定义对象进行保存,而通过归档能将所有的对象转化为二进制数据存储到文件中. 归档的缺点 归档保存数据,只能一次性归档保存以及一次性解压.所以只能针对小量数据,而且对数据操作比较笨拙,即如果想改动数据的某一小部分,还是需要解压整个数据或者归档整个数据.

ios数据存储之一 —— NSUserDefaults(偏好设置)

1 存储数据到NSUserDefaults(偏好设置)中 // 获取NSUserDefaults对象 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // 保存数据(如果设置数据之后没有同步, 会在将来某一时间点自动将数据保存到Preferences文件夹下面) [defaults setObject:@"lnj" forKey:@"name"]; [defaults setObje

Android学习之简单的数据存储

在Android中,数据存储是开发人员不可以避免的.Android为开发者提供了很多的存储方法,在前面的博客中,已经讲述了sqlite存储数据.今天将介绍用SharedPreferences来存储数据,它可以将数据保存在应用软件的私有存储区,存储区的数据只能被写入这些数据的软件读取.SharedPreference通过键值对的方法存储数据. 1.SharedPreference存储简单数据 SharedPreference可以存放简单的String.Boolean.Int等对象. 1 <Rela

三种数据存储 (plist,NSUserDefaults存储,NSKeyedArchiver存模型方法)

plist :一般存储一般对象:NSString,字典,数组,NSData 第一,首先要设置2个按钮,基本知识,就不在这写了,直接写按钮的触发事件来存储和读取 - (IBAction)save { // 1.获得沙盒根路径 NSString *home = NSHomeDirectory(); // 2.document路径 NSString *docPath = [home stringByAppendingPathComponent:@"Documents"]; // 3.新建数据

iOSiOS开发之数据存储之NSKeyedArchiver

1.概述 NSKeyedArchiver归档和plist文件存储不同的是NSKeyedArchiver可以直接保存对象.如果对象是NSString.NSDictionary.NSArray.NSData.NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复.不是所有的对象都可以直接用这种方法进行归档,只有遵守了NSCoding协议的对象才可以被存储. NSCoding协议中的2个方法: (1)encodeWithCoder: 存对象时该方法必须实现,每次归档对象时,都会

cocos2d-x中的简单的数据存储

Cocos2d-x中的数据存储方式很多,下面我来简单的介绍几种,有说的不准确的地方,大家指出来吧,共同学习进步.谢谢! 首先介绍的是  UserDefault 这个类: //用userdefault进行数据存储 UserDefault::getInstance()->setStringForKey("testKey","testValue");//将String类型的数据存储起来 //读取上面写入的数据 std::string val = UserDefaul

android SharedPreferences 简单的数据存储

SharedPreferences 简单数据存储,我的理解是类似于windows的ini文件 可以存储很多种类型,写了个小例子 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLa

Android开发7:简单的数据存储(使?SharedPreferences)和文件操作

前言 啦啦啦~大家好,又见面啦~ 本篇博文讲和大家一起完成一个需要注册.登录的备忘录的,一起学习 SharedPreferences 的基本使用,学习 Android 中常见的文件操作方法,复习 Android 界面编程. 直接进入正题~ 基础知识 1.SharedPreferences 的使用 使用SharedPreferences储存用户名和密码,SharedPreferences是直接处理xml文件,不需要做字符串分割,存储效率会比使用内部存储,和外部存储存储用户名和密码高. (1) Sh