IOS应用开发-数据库创建「建议收藏」

IOS应用开发-数据库创建

大家好,又见面了,我是全栈君。

一、前言
  
数据库作为一种数据载体被我们频繁地使用。一般情况下我们会在程序的入口方法处完成数据库的创建。下面通过实例简单介绍两种创建数据库的方法。
  
二、需求
  在documents目录下创建一个
test.sqlite数据库,里面包含表User。User表含username和password两个varchar类型的字段。
  
方法一:使用SQLiteManager创建数据库和表,并将创建好的数据库文件拖入项目中,最后调用以下代码将数据库复制到documents目录;
/**
*  将数据库文件复制进沙盒
*/
-(void)createEditableCopyOfDatabaseIfNeeded
{
// 先判断 sandbox 下面的 documents 子文件夹里面有没有数据库文件 test.sqlite
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@”test.sqlite”];
BOOL ifFind = [fileManager fileExistsAtPath:writableDBPath];
if (ifFind)
{
// NSLog(@”数据库已存在”);
return;
}
else{
NSLog(@”数据库不存在,需要复制”);
}
// 如果不存在数据库文件,则复制数据库文件
NSString *defaultDBPath = [[NSBundle mainBundle] pathForResource:@”test” ofType:@”sqlite”];
BOOL ifSuccess = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!ifSuccess) {
NSLog(@”Failed to create writable database file with message ‘%@’.”, [error localizedDescription]);
}else {
NSLog(@”createEditableCopyOfDatabaseIfNeeded 初始化成功”);
}
return;
}
  
方法二:利用开源的FMDB库代码创建数据库;
/**
*  代码创建数据库
*/
– (void)createDatabaseIfNeeded
{
// 数据库路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *doc = [paths objectAtIndex:0];
NSString *path = [doc stringByAppendingPathComponent:@”test.sqlite”];
NSFileManager * fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:path] == NO) {
// create it
FMDatabase * db = [FMDatabase databaseWithPath:path];
if ([db open]) {
// 建立User表
NSMutableString *sql = [NSMutableString stringWithFormat:@”%@”,@”CREATE TABLE User”];
[sql appendString:@”(“];
[sql appendString:@”username varchar,”];
[sql appendString:@”password varchar”];
[sql appendString:@”)”];
BOOL res = [db executeUpdate:sql];
if (!res) {
debugLog(@”error when creating table User”);
} else {
debugLog(@”succ to creating table User”);
}
[db close];
}
else {
debugLog(@”error when open db”);
}
}
}
  注:FMDB库使用教程http://blog.devtang.com/blog/2012/04/22/use-fmdb/
  
三、总结
  1、第一种方法创建数据库在需求变动的情况下(如增加几张表)容错率稍高,推荐使用第一种方法;
  2、两种方法均是先判断数据库是否存在然后再决定要不要创建/复制数据库。在一种特殊情况下-应用更新版本,其实原来的数据库文件是会从老的版本中拷贝到新版本中(参考:http://blog.csdn.net/zyx586/article/details/18989199),所以更新版本后数据库文件是不会做任何改变的,就算你在新的版本中完全改变数据库的结构。所以如果存在数据库变动的需要在应用版本升级后重新创建一个全新的数据库并备份旧的数据;


最新内容请见作者的GitHub页:http://qaseven.github.io/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108356.html原文链接:https://javaforall.net

(0)
上一篇 2022年3月4日 下午10:00
下一篇 2022年3月4日 下午11:00


相关推荐

  • vs 2010 专业版 密钥「建议收藏」

    vs 2010 专业版 密钥「建议收藏」YCFHQ-9DWCY-DKV88-T2TMH-G7BHP转载于:https://www.cnblogs.com/daretodream/archive/2013/04/02/2995147.html

    2022年6月6日
    34
  • QPM(量化项目管理)

    QPM(量化项目管理)一 1 首先收集原始数据 2 对收集的数据进行处理 会做出一张全生命周期的主模型 包括需求开发 需求评审 设计 设计评审 编码 代码验证 测试等 收集的数据包括 LL AVG UL STDEV 标准差 3 对搜集得到的数据进行归一化处理 二 1 定义假设 绿色 将各个搜集到的数据填写进去 假设就定义好了 2 定义决策 黄色 填写下限 从 1 开始 与上线 几种选择方法

    2026年3月19日
    1
  • QProcess使用

    QProcess使用QProcess 使用 QProcess 可以用于启动外部程序 具有两种方式 一体式 QProcess start 方法 外部程序启动后 将随主程序的退出而退出 貌似要使用 QProcess 的 close 方法才可以关闭启动的外部程序 分离式 QProcess startDetache 方法 外部程序启动后 当主程序退出时并不退出 而是继续运行 1 start 使用 Qt 头文

    2026年3月19日
    1
  • linux下kegg注释软件,网页工具KOBAS进行KEGG富集分析

    KOBAS的介绍KOBAS是北大生物信息中心研发的一个网页工具,用来基因/蛋白功能注释(注释模块)和功能基因集富集(富集模块)。以下是KOBAS的英文介绍:KOBAS3.0isawebserverforgene/proteinfunctionalannotation(Annotatemodule)andfunctionalgenesetenrichment(Enri…

    2022年4月12日
    106
  • 蓝天集团董事长郎凤娥专访

    蓝天集团董事长郎凤娥专访记者 您好 很高兴您能接受我们的访问 您能谈谈咱们蓝天集团未来的业务发展是什么吗 另外 我对蓝天不是很了解 您能给我介绍一下蓝天集团的情况么 郎凤娥 好的 那我现在给您介绍一下蓝天集团 蓝天集团是从事节能环保的企业 主要以垃圾发电和节能环保等几种业务为核心 进行技术研发 装备生产 工程建设 后期运营等一体化服务 蓝天不仅是装备制造企业 还是节能环保服务的企业 蓝天集团大多数项目是能源管理的服务模式

    2025年9月30日
    5
  • 【我的Android进阶之旅】Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法「建议收藏」

    【我的Android进阶之旅】Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法「建议收藏」错误描述今天使用第三方的so库时候,调用JNI方法时出现了错误。报错如下所示:11-0116:39:20.9794669-4669/com.netease.xtc.cloudmusicE/art:Noimplementationfoundforvoidcom.netease.xtc.cloudmusic.utils.NeteaseMusicUtils.nativeInit(…

    2025年8月25日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号