IOS sqlite简单使用 以及为什么sqlite3_open无法创建数据库的原因

本文介绍了iOS中数据存储方式,强调了SQLite作为大批量数据存储的选择。讲解了SQLite的特性,并提供了创建数据库的步骤。特别指出sqlite3_open无法创建数据库的问题,通常由于错误的沙盒路径,尤其是将NSDocumentDirectory误用为NSDocumentationDirectory,后者没有写权限,导致无法创建数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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路径,这个路径是没有读写权限的,故不能创建数据库文件。

所以兔子们,不能创建数据库的原因,该从你的目录去查找问题哦。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值