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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JsonArray转换List

    JsonArray转换List将List转换为JsonArray:AppResponse<List<ProjectVo>>allProject=projectServiceFeign.findAllProject();//转jsonStringtoJSONString=JSON.toJSONString(allProject.getData());//保存到redis中,设置失效时间redisTemplate.opsForValue().set(“projectStr”,toJSONStr

    2022年6月23日
    31
  • 会计初级学习笔记

    会计初级学习笔记

    2021年6月30日
    87
  • [转] 2016 JavaScript 发展现状大调查[通俗易懂]

    [转] 2016 JavaScript 发展现状大调查[通俗易懂][转] 2016 JavaScript 发展现状大调查

    2022年4月20日
    42
  • 正态qq图怎么判断分布_怎么判断是不是QQ小号

    正态qq图怎么判断分布_怎么判断是不是QQ小号一、正态QQ图的原理QQ图通过把测试样本数据的分位数与已知分布相比较,从而来检验数据的分布情况。[1]分位数:亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点。常用的有一个分位数叫,百分位数,它是指如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。QQ图是一种散点图,对应于正态分布的QQ图,就是由标准正态分布的分位

    2022年8月10日
    4
  • _bz2 缺少

    _bz2 缺少报错信息from_bz2importBZ2Compressor,BZ2DecompressorModuleNotFoundError:Nomodulenamed’_bz2’解决办法1、安装yuminstallbzip2-devel2、找到_bz2.cpython-37m-x86_64-linux-gnu.so文件如果在机器上没有的话,…

    2022年5月12日
    123
  • 使用pycharm安装第三方库_pycharm找不到第三方库

    使用pycharm安装第三方库_pycharm找不到第三方库Pycharm是我比较喜欢的一款编辑器。  学习python有半年左右,安装第三方库都是通过 pip install 或者 easy_install。每次都要打开命令行感觉太麻烦。还好Pycharm提供了安装第三方库和安装插件的功能。   首先打开Pycharm,点击左上角 >>File >>Setting。    打开之后点击>>Project:

    2022年8月29日
    2

发表回复

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

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