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/

时间: 2024-09-16 02:12:59

IOS应用开发-数据库创建的相关文章

iOS开发数据库篇—SQLite简单介绍

一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1)归档:NSCodeing.NSKeyedArchiver (2)偏好设置:NSUserDefaults (3)Plist存储:writeToFile 提示:上述三种方法都有一个致命的缺点,那就是都无法存储大批量的数据,有性能的问题. 举例:使用归档 两个问题: (1)数据的存取都必须是完整的,要求写入的时候要一次性写入,读取的时候要一次性

iOS开发数据库篇—SQLite的应用

一.简单说明 在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件. 导入头文件,可以使用库中的函数(是纯C语言的)   二.具体说明 新建一个项目,在项目的主界面中放四个按钮(分别是,增加.删除.修改.查询). 1.sqlite3_open(<#const char *filename#>, <#sqlite3 **ppDb#>)函数的一些说明: (1)作用:把一个文件名称传递给他,它会自动检测这个文件是否存在,如果不存在的话,会自动创建相

iOS 开发 之 创建你自已的 Framework

iOS 开发 之 创建你自已的 Framework 这一篇未经允许不能转载,那么这么好的东西想分享出来,只能截图加链接,您蹦过去看原文吧!

《iOS 9 开发指南》——第6章,第6.5节创建一个界面

6.5 创建一个界面iOS 9 开发指南图片 25 知识点讲解:光盘:视频知识点第6章创建一个界面.mp4在本节的内容中,将详细讲解如何使用Interface Builder创建界面的方法.在开始之前,需要先创建一个Empty.storyboard文件. 6.5.1 对象库添加到视图中的任何控件都来自对象库(Object Library),从按钮到图像再到Web内容.可以依次选择Xcode菜单View→Utilities→Show Object Library(Control+Option+Co

iOS开发数据库篇—SQLite常用的函数

一.简单说明 1.打开数据库 int sqlite3_open( const char *filename, // 数据库的文件路径 sqlite3 **ppDb // 数据库实例 ); 2.执行任何SQL语句 int sqlite3_exec( sqlite3*, // 一个打开的数据库实例 const char *sql, // 需要执行的SQL语句 int (*callback)(void*,int,char**,char**), // SQL语句执行完毕后的回调 void *, // 回

Delphi XE之路(13)开发数据库三层应用的DataSnap

我觉得Delphi最强大的的功能之一就是开发数据库三层应用的DataSnap,在Android上的实现,首先是完成服务器的设计: (1)利用向导完成DataSnap服务器的框架,如下图: 由于是实验,所以选择VCL程序,如果是实际应用,建议Service程序 我习惯使用TCP/IP作为通讯协议,简单且速度快,Sample Methods是演示和测试用 缺省211端口 使用TDSServerModule作为数据服务提供主体,非常方便变更为Service应用服务   (2)设置服务器数据 在TDSS

《iOS 8开发指南》——第6章,第6.1节MVC模式基础

第6章 使用Xcode编写MVC程序 iOS 8开发指南 在本书前面的内容中,已经学习了面向对象编程语言Objective-C的基本知识,并且探索了Cocoa Touch.Xcode和Interface Builder编辑器的基本用法.虽然我们已经使用了多个创建好的项目,但是还没有从头开始创建一个项目.在本章的内容中,将向读者详细讲解"模型-视图-控制器"应用程序的设计模式,并从头到尾创建一个iOS应用程序的过程,为读者步入本书后面知识的学习打下基础. 6.1 MVC模式基础 iOS

《iOS 8开发指南(第2版)》——第6章,第6.1节MVC模式基础

6.1 MVC模式基础 iOS 8开发指南(第2版) 当我们开始编程时,会发现每一个功能都可以用多种编码方式来实现.但是,究竟哪一种方式才是最佳选择呢?在开发iOS应用程序的过程中,通常使用的设计方法被称为"模型-视图-控制器"模式,这种模式被简称为MVC,通过这种模式可以帮助我们创建出简洁.高效的应用程序. 6.1.1 诞生背景 在创建与用户交互的应用程序时,首先必须考虑如下3点. 用户界面:我们必须提供让用户能够与之交互的东西,例如,按钮和文本框等. 对用户输入进行处理并做出反应.

《iOS 8开发指南》——第6章,第6.2节Xcode中的MVC

6.2 Xcode中的MVC iOS 8开发指南 在用Xcode编程并在Interface Builder中安排用户界面(UI)元素后,Cocoa Touch的结构旨在利用MVC(Model-View-Controller,模型-视图-控制器)设计模式.在本节的内容中,将讲解Xcode中MVC模式的基本知识. 6.2.1 原理 MVC模式会将Xcode项目分为如下3个不同的模块. 1.模型 模型是应用程序的数据,比如项目中的数据模型对象类.模型还包括采用的数据库架构,比如Core Data或者直

《iOS 8开发指南(第2版)》——第6章,第6.2节Xcode中的MVC

6.2 Xcode中的MVC iOS 8开发指南(第2版) 在用Xcode编程并在Interface Builder中安排用户界面(UI)元素后,Cocoa Touch的结构旨在利用MVC(Model-View-Controller,模型-视图-控制器)设计模式.在本节的内容中,将讲解Xcode中MVC模式的基本知识. 6.2.1 原理 MVC模式会将Xcode项目分为如下3个不同的模块. 1.模型 模型是应用程序的数据,比如项目中的数据模型对象类.模型还包括采用的数据库架构,如Core Dat