一、IOS数据存储方式
1.IOS中数据的存储方式有:
1)plist(NSArray、NSDictionary)
2)Preference(偏好设置,NSUserDefaulters)
3)NSCoding(NSKeyedArchiver)
4)sqlite3(数据库)
5)Core Data
2.其中归档、偏好设置还有plist存储都无法存储大量的数据。故大批量数据通常使用数据库来存储到项目的沙盒中。
二、sqlite简介
sqlite是一种轻量级的嵌入式数据库,占用资源非常低,在嵌入式设备中,可能只需要几百K的内存就可以了。(额,这是度娘到的资料)而sqlite3是sqlite的第三个版本,CoreData是对sqlite的封装,因为IOS中使用的sqlite是纯C语言的。
sqlite和其他数据库一样,要存储数据,就得创建库,创建表,添加列column属性,插入多行记录record。
三、IOS创建数据库操作
1.新建项目,添加sqlite开发库libsqlite3.dylib(PS:新版本的Xcode可以添加libsqlite3.tdb)
2.在需要使用到数据库的地方导入sqlite3的头文件:#import <sqlite3.h>
3.创建和打开数据库
sqlite3_open这个方法是用来打开数据库,若数据库不存在,会自动帮你创建数据库;
//1)获取沙盒目录
NSString *docsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSString *databasePath = [[NSString alloc]initWithString:[docsDir stringByAppendingPathComponent:@"student.sqlite"] ];
NSFileManager *fileManager = [NSFileManager defaultManager];
const char *dbpath = [databasePath UTF8String];
if ([fileManager fileExistsAtPath:databasePath]==NO)
{
if (sqlite3_open(dbpath, &database)==SQLITE_OK)
{
char *errmsg;
const char *createSql = "CREATE TABLE IF NOT EXISTS student (id integer PRIMARY KEY AUTOINCREMENT,NUM TEXT,CLASSNAME TEXT,NAME TEXT)";
if (sqlite3_exec(database, createSql, NULL, NULL, &errmsg)!= SQLITE_OK)
{
NSLog(@"创建数据库表失败");
}
}
}
!!!重点来了:为啥一直创建不了数据库。认真仔细检查了好一会,原来是我沙盒路径取错了。我把 NSDocumentDirectory不小心弄成了NSDocumentationDirectory. 代码敲太快,手贱!兔子们,我们一起来科普下这两者的区别。
IOS应用沙盒包含有四个部分(1.应用程序包application bundle 2.应用运行时保留的数据Documents 3.临时文件[tmp/] 4. 偏好设置文件[library/preferences/] 5.Library/caches)
NSDocumentDirectory是指程序对应的documents(用户数据)的路径。而NSDocumentationDirectory对应的程序中的Library/Documentation路径,这个路径是没有读写权限的,故不能创建数据库文件。
所以兔子们,不能创建数据库的原因,该从你的目录去查找问题哦。