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年8月21日
    5
  • pycharm2021最新激活码 3月最新注册码

    pycharm2021最新激活码 3月最新注册码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    46
  • 利用两个dll实现全局钩子

    利用两个dll实现全局钩子全局消息钩子的钩子函数一定要再dll中,然后启动安装钩子不能在dll中,要是我想在程序开始时安装钩子怎么办。很简单利用两个钩子就行了,只要安装钩子和钩子函数不在同一个dll就行了。下面请看案例(编译

    2022年7月2日
    19
  • cocos3——8.实现初学者指南

    cocos3——8.实现初学者指南

    2022年1月15日
    59
  • jenkins安装和简单配置

    jenkins安装和简单配置

    2020年11月19日
    173
  • Windows安装git客户端[通俗易懂]

    Windows安装git客户端[通俗易懂]1、客户端安装工具如下Git-2.12.2.2-64-bit.exe下载地址:https://gitforwindows.org/,界面如下TortoiseGit-2.4.0.2-64bit.msi下载地址:https://tortoisegit.org/,界面如下Git-2.12.2.2-64-bit.exe:是需要安装的git真正工具TortoiseGit-2.4.0.2-64bit.msi:…

    2025年10月1日
    2

发表回复

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

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