/*===---===
在这个部分中我么进行一下操作:(要把数据库文件存放到储存的位置中)
1.获取应用程序的路径,在手机中就是 应用程序存储数据的地方
2.把数据库文件的名称拼接到上面得到的路径上
3.根据拼接好的路径去寻找,并判断这个文件是否存在
===---===*/
//获取应用程序的路径
NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *documentFolderPath = [searchPaths objectAtIndex:0];
NSLog(@"docoumentFolderPath=%@",documentFolderPath);
//往应用程序路径中添加数据库文件名称,把它们拼接起来, 这里用到了宏定义(目的是不易出错)
dbFilePath = [documentFolderPath stringByAppendingPathComponent:DATABASE_FILE_NAME];
NSLog(@"dbFilePath = %@",dbFilePath);
//
/*
为什么要往应用程序里添加数据库文件这个过程:
因为下面要进行判断,会根据这个路径去查找应用程序的路径中到底有没有这个文件,
如果有,则不用在此拷贝了,
如果没有,则重新拷贝一次,
数据库文件必须添加进取,否则无法进行数据库的操作,而且必须添加一次,
那么为什么必须要添加一次呢?
因为我们在程序中实现对数据库的修改,然而却又把数据库添加了一次,
那么新添加的数据库就会把旧的数据库覆盖掉,那么程序中对数据库的修改也不能实现,
所以数据库只能添加一次且是在程序运行初添加
*/
//根据上面拼接好的路径 dbFilePath ,利用NSFileManager 类的对象的fileExistsAtPath方法来检测是否存在,返回一个BOOL值
//1. 创建NSFileManager对象 NSFileManager包含了文件属性的方法
NSFileManager *fm = [NSFileManager defaultManager];
//2. 通过 NSFileManager 对象 fm 来判断文件是否存在,存在 返回YES 不存在返回NO
BOOL isExist = [fm fileExistsAtPath:dbFilePath];
//- (BOOL)fileExistsAtPath:(NSString *)path;
//如果不存在 isExist = NO,拷贝工程里的数据库到Documents下
if (!isExist)
{
//拷贝数据库
//获取工程里,数据库的路径,因为我们已在工程中添加了数据库文件,所以我们要从工程里获取路径
NSString *backupDbPath = [[NSBundle mainBundle]
pathForResource:@"shopping"
ofType:@"db"];
//这一步实现数据库的添加,
// 通过NSFileManager 对象的复制属性,把工程中数据库的路径拼接到应用程序的路径上
BOOL cp = [fm copyItemAtPath:backupDbPath toPath:dbFilePath error:nil];
NSLog(@"cp = %d",cp);
//- (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error
NSLog(@"backupDbPath =%@",backupDbPath);
}
NSLog(@"isExist =%d",isExist);
分享到:
相关推荐
4. **SQLite3到XML**:从SQLite3数据库导出为XML的过程则相反: - 执行SQL查询,获取所需数据。 - 使用LIBXML创建一个新的XML文档。 - 将查询结果映射到XML元素结构,构建DOM树。 - 将DOM树序列化为XML字符串,...
首先,你需要导入`sqlite3.h`库,并初始化一个数据库连接。在`AppDelegate`中,你可以创建一个方法来打开或创建数据库文件: ```swift func createOrOpenDatabase() -> OpaquePointer? { var db: OpaquePointer?...
SQLite是一个轻量级、自包含的数据库引擎,常用于桌面应用程序,包括那些使用Adobe AIR开发的应用。这些示例可能涉及如何在AIR应用中创建、查询、更新和删除数据库记录,以及如何将数据存储到本地。 描述中的...
9. 数据备份与恢复:Android提供了Intent ACTION_CREATE_DOCUMENT和ACTION_OPEN_DOCUMENT,允许用户选择外部存储位置进行数据库的导出和导入,实现数据备份与恢复。 10. 最佳实践:合理设计数据模型,避免冗余数据...
- 使用.NET Framework中的`System.Xml`命名空间进行XML操作,如`XmlDocument`类加载XML文件,`XmlNodeReader`读取XML数据并插入到SQLite中。 6. **Visual Studio集成** - 在VS2013中,可以使用`Add -> New Item -...
在IT领域,尤其是在软件开发中,常常需要处理数据的导入导出操作,Qt作为一个功能强大的跨平台应用程序开发框架,提供了丰富的API供开发者使用。本文将详细介绍如何利用Qt来实现从数据库导出数据到Excel表格的功能。...
8. **文件选择器和保存对话框**:为了让用户选择TXT文件进行导入或导出,你需要了解如何使用Intent ACTION_OPEN_DOCUMENT或ACTION_CREATE_DOCUMENT,这涉及到Android的存储访问框架(SAF)。 9. **异常处理**:在...
在Android平台上,实现数据的保存和导入到Excel文件是一个常见的需求,特别是在开发涉及大量数据处理的应用时。这个名为"Android_Excel-master"的压缩包似乎包含了一些资源链接,如"去脚本之家看看.url"、"服务器...
3. **数据库集成**:将数据存储从内存转移到数据库,如使用SQL Server或SQLite,提高数据的安全性和可扩展性。 4. **错误处理和异常安全**:学习如何编写健壮的代码,处理可能出现的错误和异常情况。 总之,“MFC...
1. **A0188_SQLite_SQLiteClient.zip**:这个文件涉及到C#与SQLite数据库的交互,SQLite是一个轻量级的嵌入式数据库,适用于移动设备和本地应用程序。SQLiteClient是.NET Framework提供的用于连接SQLite的库,你可以...
XMLDOM(XML Document Object Model)是用于处理XML文档的一个接口,它是W3C制定的一套标准,允许程序和脚本动态地访问和更新XML文档的内容、结构和样式。在这个chm格式的文件“XMLDOM对象方法手册”中,很显然包含...
(board) 解决使用咨询功能时无法读取公告项的问题 - zero 数据导入(importer) 重新设计导入程序 - 解决导入大容量数据时出现的问题 - zero 解决导入会员信息时处理相同昵称时出现的问题 - zero ...
DOM解析器将整个XML文档加载到内存中,形成一棵DOM树,然后可以方便地通过节点遍历和操作XML结构。这种方式的优点是操作灵活,但缺点是对内存和CPU资源消耗较大,不适用于大文件解析。在Android中,`javax.xml....
首先,系统的核心可能由一个基于单文档(Single Document Interface, SDI)的应用程序架构组成。SDI允许每个应用程序实例处理一个单独的文档,用户可以通过菜单、工具栏或者对话框来操作这些文档。在MFC中,`CWinApp...
2. 移动应用:iOS的Core Data框架和Android的SQLite数据库都支持XML格式的导入导出。 3. 数据库:XML可用于存储非关系型数据,如NoSQL数据库MongoDB。 通过XML实例教程的学习,你将能够熟练创建和解析XML文档,利用...
这些资源随后会被导入到苹果CMS系统中,供网站用户浏览和播放。 4. **源码**: 提供的".zip"文件包含的是源代码,意味着你可以看到程序的内部结构,理解其工作原理,并根据需要进行修改或扩展。这对于开发者来说非常...
8. **XML与数据库集成**:在移动设备上,XML有时被用作与嵌入式数据库(如SQLite)交互的数据格式,用于导入导出数据。 9. **XML在网络通信中的应用**:XML常用于RESTful API或SOAP协议,允许移动设备与服务器进行...
为了提升用户体验,个人理财应用还需要提供数据导入导出功能,让用户能够从其他财务软件或银行文件中导入数据,或导出数据到CSV、Excel等格式进行备份或进一步处理。此外,图表和图形化的数据分析视图也是必不可少的...
此外,备份和恢复功能也很重要,可以利用Android的Intent.ACTION_CREATE_DOCUMENT和ACTION_OPEN_DOCUMENT来实现数据的导入导出。 总的来说,构建一个Android备忘录应用需要掌握Android的基础知识,包括UI设计、...