文档章节

[ios]如何使用 Xcode,读取和写入存在的数据库文件?

法斗斗
 法斗斗
发布于 2016/07/21 18:56
字数 494
阅读 153
收藏 0
点赞 0
评论 0

[ios]如何使用 Xcode,读取和写入存在的数据库文件?

注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

 

我是有点新到 Xcode 和 sqlite。现在我有一个名为"mydb.db"的数据库文件,它已经有一些表和数据。我把它放在我的 mac 文件夹和拖动它到我 Xcode 项目在"支持文件"下。

这里是我的代码,但我发现我可以从这个"mydb.db",只能读取,无法插入数据到它 !当我打开"mydb.db"后执行我由 sqlite 管理器的代码,我找不到的数据,应插入 !

谁能告诉我如何解决这个问题?多谢!

NSString *dbFilePath = [[NSBundle mainBundle] pathForResource:@"mydb" ofType:@"db"];
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:dbFilePath]

    [queue inDatabase:^(FMDatabase *db) {
        [db executeUpdate:@"INSERT INTO Focus VALUES (?,?,?)" withArgumentsInArray:@[@"100000000",@2,@2]];

    }];

解决方法 1:

通过将 sqlite db 文件添加到您的支持文件组在 Xcode 中,只添加的文件到应用程序的包以便在生成过程中它获取与所有其他资源打包。因为应用程序不能写入到其捆绑,你必须 sqlite 数据库从复制文件捆绑到一个可写的位置例如

#define FORCE_RECOPY_DB NO

- (void)copyDatabaseIfNeeded {
    NSFileManager *fm = [[NSFileManager alloc] init];
    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *destinationPath = [documentsPath stringByAppendingPathComponent:@"pte.sqlite"];

    void (^copyDb)(void) = ^(void){
        NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"pte" ofType:@"sqlite"];
        NSAssert1(sourcePath, @"source db does not exist at path %@",sourcePath);

        NSError *copyError = nil;
        if( ![fm copyItemAtPath:sourcePath toPath:destinationPath error:&copyError] ) {
            DDLogError(@"ERROR | db could not be copied: %@", copyError);
        }
    };
    if( FORCE_RECOPY_DB && [fm fileExistsAtPath:destinationPath] ) {
        [fm removeItemAtPath:destinationPath error:NULL];
        copyDb();
    }
    else if( ![fm fileExistsAtPath:destinationPath] ) {
        DDLogInfo(@"INFO | db file needs copying");
        copyDb();
    }
}

现在当您想要打开的数据库,使用中的文件路径的位置。

请注意你就不能来检查您的项目中的 sqlite db 文件和期望找到写入从您的代码的更改。(因为您的代码将现在工作与复制的 sqlite 文件。)

最新最早最热

 

本文转载自:

共有 人打赏支持
法斗斗
粉丝 20
博文 336
码字总数 6335
作品 0
杨浦
程序员
iOS ZipperDown 漏洞来袭,我们该如何应对?

  昨天傍晚盘古实验室负责任的披露了针对 iOS 应用的 ZipperDown 漏洞,并提供了检索、查询受影响应用的平台: zipperdown.com。基于目前公开的信息,该漏洞的影响面比较大,15000 多个应用...

FreeBuf ⋅ 05/16 ⋅ 0

【AR】开始使用Vuforia开发iOS(2)

原 设置iOS开发环境 安装Vuforia iOS SDK 如何安装Vuforia iOS示例 编译并运行Vuforia iOS示例 支持iOS金属 iOS 64位迁移 设置iOS开发环境 适用于iOS的Vuforia引擎目前支持运行iOS 9及更高版...

lichong951 ⋅ 06/11 ⋅ 0

如何在Electra越狱的设备上使用LLDB调试应用程序

        在3月18日的时候,我就曾发表过一篇关于在Electra越狱的设备上使用LLDB调试应用程序的文章。本文我将在此基础上,做进一步的更新优化。   我试图在google搜索,有关使用Ele...

FreeBuf ⋅ 05/29 ⋅ 0

xcode 制作静态库.a文件 详解

https://blog.csdn.net/pjk1129/article/details/7255163 最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework。在Xcode上没有找到允许编译,如同Andro...

壹峰 ⋅ 05/10 ⋅ 0

面试官自述:面向高级开发人员的iOS面试问题

当您准备进行技术性iOS面试时,了解您可能会询问哪些主题以及经验丰富的iOS开发人员期望什么是非常重要的。 这是许多硅谷公司用来衡量iOS候选人资历水平的一系列问题。 这些问题涉及iOS开发的...

菇哒微课 ⋅ 04/26 ⋅ 0

Unity与IOS交互,调用IOS系统相机和相册

前面两篇总结了一下unity与android的简单交互和调用安卓系统相机和相册,比较蛋疼的是,后来发现不同的测试机上会有不同的bug。。。下阶段要一个一个的解决一下 今天总结一下与IOS的交互。这...

qq_32587659 ⋅ 05/16 ⋅ 0

iOS逆向工程- 学习整理(工具详解)

前言 一、逆向工程的要求 具备丰富的 iOS 开发经验 最好能非常熟悉 iOS 设备的硬件构成,iOS 系统的运行原理。 拿到任意一个 App 之后能够大致推断出它的项目规模和使用的技术,比如它的MVC模...

_小迷糊 ⋅ 05/11 ⋅ 0

构建你的Office 365开发环境 - IOS版

博客地址:http://blog.csdn.net/FoxDave 本文主要介绍在开始创建应用之前,如何构建你的Office 365开发环境去调用Office 365 API。 构建Office 365开发环境包含了三个一次性的工作: 下载开...

justinliu927 ⋅ 04/16 ⋅ 0

将成型的iOS工程嵌入到u3d工程中

一、合并iOS工程和u3d工程 1、一个U3d导出的Xcode工程Unity-iPhone,单独编译运行OK 2、一个iOS工程ARHere,单独编译运行OK 3、打开终端cd 到Unity-iPhone文件夹,vim Podfile,把ARHere的内...

朝雨晚风 ⋅ 2016/11/29 ⋅ 0

如何在iOS中构建实时用户的状态更新

在构建聊天应用程序时,看到朋友的列表和朋友的状态并不少见。像WhatsApp这样的应用程序具有此功能,检查您的朋友的状态非常有用,并知道在那时向他们发送消息是否明智。 我们将在一个虚构的...

菇哒微课 ⋅ 04/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

NFS介绍 NFS服务端安装配置 NFS配置选项

NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导...

lyy549745 ⋅ 32分钟前 ⋅ 0

Spring AOP 源码分析 - 筛选合适的通知器

1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析。本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出合适的通知器(Advisor...

java高级架构牛人 ⋅ 55分钟前 ⋅ 0

HTML-标签手册

标签 描述 <!--...--> 定义注释。 <!DOCTYPE> 定义文档类型。 <a> 定义锚。超链接 <abbr> 定义缩写。 <acronym> 定义只取首字母的缩写。 <address> 定义文档作者或拥有者的联系信息。 <apple......

ZHAO_JH ⋅ 56分钟前 ⋅ 0

SylixOS在t_main中使用硬浮点方法

问题描述 在某些使用场景中,应用程序不使用动态加载的方式执行,而是跟随BSP在 t_main 线程中启动,此时应用代码是跟随 BSP 进行编译的。由于 BSP 默认使用软浮点,所以会导致应用代码中的浮...

zhywxyy ⋅ 今天 ⋅ 0

JsBridge原理分析

看了这个Github代码 https://github.com/lzyzsd/JsBridge,想起N年前比较火的Hybrid方案,想看看现在跨平台调用实现有什么新的实现方式。代码看下来之后发现确实有点独特之处,这里先把核心的...

Kingguary ⋅ 今天 ⋅ 0

Intellij IDEA神器常用技巧五-真正常用快捷键(收藏级)

如果你觉得前面几篇博文太啰嗦,下面是博主多年使用Intellij IDEA真正常用快捷键,建议收藏!!! sout,System.out.println()快捷键 fori,for循环快捷键 psvm,main方法快捷键 Alt+Home,导...

Mkeeper ⋅ 今天 ⋅ 0

Java 静态代码分析工具简要分析与使用

本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,...

Oo若离oO ⋅ 今天 ⋅ 0

SpringBoot自动配置小记

spring-boot项目的特色就在于它的自动配置,自动配置就是开箱即用的本源。 不过支持一个子项目的自动配置,往往比较复杂,无论是sping自己的项目,还是第三方的,都是如此。刚接触会有点乱乱...

大_于 ⋅ 今天 ⋅ 0

React jsx 中写更优雅、直观的条件运算符

在这篇文字中我学到了很多知识,同时结合工作中的一些经验也在思考一些东西。比如条件运算符 Conditional Operator condition ? expr_if_true : expr_if_false 在jsx中书写条件语句我们经常都...

开源中国最帅没有之一 ⋅ 今天 ⋅ 0

vim编辑模式与命令模式

5.5 进入编辑模式 从编辑模式返回一般模式“Esc” 5.6 vim命令模式 命令 :“nohl”=no high light 无高亮,取消内容中高亮标记 "x":保存退出,和wq的区别是,当进入一个文件未进行编辑时,使...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部