sqlite ios:尝试写入只读数据库

2024-02-13

我在项目中使用 sqlite 数据库。我可以执行像 SELECT 这样的查询,但无法执行 INSERT! 在模拟器上 INSERT 工作正常。当我在 iPod 上编译时,就会出现以下错误消息:“尝试写入只读数据库”.

认为这是文件的权利,我做了:chmod 777 mydatabase.sqlite但这并没有改变!

我也尝试过,正如我在其他网站上读到的那样,复制该文件以使用他的副本以使其正常,但无济于事。

你有解决办法吗? 诚挚的。

PS:这是我的代码:

for(NSDictionary *q in quotes) {
    sqlite3_stmt    *statement;
    sqlite3 *contactDB;
    const char *dbpath = [dbPath UTF8String];

    if (sqlite3_open_v2(dbpath, &contactDB, SQLITE_OPEN_READWRITE, NULL) == SQLITE_OK)
    {
        NSInteger identifiant = [[q objectForKey:@"id"] integerValue];
        NSString *texte = [q objectForKey:@"texte_english"];
        NSString *auteur = [q objectForKey:@"auteur"];
        NSString *date = [q objectForKey:@"date"];
        NSInteger auteurId = [[q objectForKey:@"auteur_id"] integerValue];
        NSInteger nbComments = [[q objectForKey:@"nb_comments"] integerValue];

        NSString *insertSQL = 
                [NSString stringWithFormat:@"INSERT INTO quotes (id, texte_english, auteur, date, auteur_id, nb_comments) VALUES (%d, \"%@\", \"%@\", \"%@\", \"%d\", \"%d\")", 
                                          identifiant, 
                                          texte, 
                                          auteur, 
                                          date, 
                                          auteurId, 
                                          nbComments];

        const char *insert_stmt = [insertSQL UTF8String];
        sqlite3_prepare_v2(contactDB, insert_stmt, -1, &statement, NULL);

        if (sqlite3_step(statement) != SQLITE_DONE)
        {
            NSLog(@"ERREUR1: %s",sqlite3_errmsg(contactDB));
        }
        sqlite3_finalize(statement);
        sqlite3_close(contactDB);
    }
}

您需要做的就是更改手机中保存 SQLite 文件的根目录,该根目录目前是只读的。进行这些更改:

将这些代码添加到您的AppDelegate :

.h 文件:

@property (nonatomic,retain) NSFileManager *fileMgr;
@property (nonatomic,retain) NSString *homeDir;
@property (nonatomic,retain) NSString *title;

.m file:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self checkAndCreateDatabase];
    return YES;
}

-(NSString *)GetDocumentDirectory{
    fileMgr = [NSFileManager defaultManager];
    homeDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    return homeDir;
}

    -(void) checkAndCreateDatabase{
    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *databasePath = [self.GetDocumentDirectory stringByAppendingPathComponent:@"YOUR DATABASE NAME.sqlite"];
    success = [fileManager fileExistsAtPath:databasePath];
    if(success) {
        NSLog(@"working");
        return;}
    else{
        NSLog(@"notworking");
    NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"YOUR DATABASE NAME.sqlite"];
    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
    }
}

也在你的SQLite class添加这些行:

.h file:

@property (nonatomic,retain) NSFileManager *fileMgr;
@property (nonatomic,retain) NSString *homeDir;

.m file:

-(NSString *)GetDocumentDirectory{
    fileMgr = [NSFileManager defaultManager];
    homeDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    return homeDir;
}

并在 INSERT 和 SELECT 中进行以下更改:

NSString *dbPath = [self.GetDocumentDirectory stringByAppendingPathComponent:@"YOUR DATABASE NAME.sqlite"];
    const char *dbpath = [dbPath UTF8String];

希望能帮助到你 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlite ios:尝试写入只读数据库 的相关文章

  • Swift 3 '[UIApplicationLaunchOptionsKey:任意]?'无法转换为 '[String : NSString]'

    我有一个 TVOS 应用程序已从 Swift 2 转换为 Swift 3 但出现以下错误 我不确定如何让它安静下来 UIApplicationLaunchOptionsKey 任意 无法转换为 String NSString 它出现在这段代
  • 删除后台 moc 中的对象然后在主 moc 中刷新它会导致 NSFetchedResultsController 更新崩溃

    我遇到了一个NSObjectInaccessibleException我无法理解 Terminating app due to uncaught exception NSObjectInaccessibleException reason
  • 在 iOS 中管理和解除多个视图控制器

    我是一名 iPhone 新手程序员 在开发我的第一个游戏 应用程序时 我为自己提出了一个问题 创造了一个问题 我对此进行了研究 并认为我已经看到了答案 但我不明白如何使它们适用于我的应用程序 我有一个游戏 有几个视图控制器 欢迎 玩 高分
  • Swift 中的弹出视图

    我有一个弹出视图 没有选项卡栏 它弹出到带有选项卡栏的视图控制器 在带有选项卡栏的视图控制器中 我设置了一个单击按钮 以便弹出视图控制器 IBAction func PopUpClicked sender UIButton gt Void
  • 使用 JavaScript 从 URL 变量读取来加载不同的 CSS 样式表

    我试图在我的 WordPress 博客上使用两个不同的样式表 以便在通过 Web 访问页面时使用一个样式表 而在通过我们的 iOS 应用程序访问博客内容时使用另一个样式表 现在 我们将 app true 附加到来自 iOS 应用程序的 UR
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁
  • 数据库字段的标准长度列表

    我正在设计一个数据库表并问自己这个问题 名字字段应该有多长 有人有最常见字段 例如名字 姓氏和电子邮件地址 的合理长度列表吗 我刚刚查询了我的数据库 其中包含美国数百万客户 最大值名长度是 46 我选择 50 当然 其中只有 500 个超过
  • Firebase 连接管理器应仅返回一个结果

    我正在关注位于以下位置的文档 https www firebase com docs ios guide offline capability html section connection state https www firebase
  • 如何在 RestKit 中为同一类提供两条发布路线

    由于我无法弄清楚如何为同一个类设置两个不同的 POST 资源路径 因此我尝试手动创建 RKObjectLoader 请求 但它似乎不断发送 GET 请求而不是 POST 即使我已将方法设置为邮政 这是我的代码 User user User
  • iOS 外部附件框架:如何获取特定 MFI 设备的协议字符串

    我正在编写一个 iOS 应用程序 用于与 mini mPlay Drumi MP18B 小型蓝牙扬声器 进行通信 据我所知 showBluetoothAccessoryPickerWithNameFilter仅显示协议字符串添加到 Info
  • Swift:从自定义 UITableViewCell 中的 UITextField 检索文本并将其放入数组中

    我正在制作一个非常简单的应用程序 用户在第一个屏幕中输入人数 在第二个屏幕中 它会生成一些UITableViewCell基于用户在第一个屏幕中输入的数字 这UITableViewCell have a UITextField在其中 一旦用户
  • SQLite:如何命名“值”子选择中的列

    在 postgres 中我可以说 test select from values 1 3 7 as foo id id 1 3 7 3 rows 这意味着这样的子选择随后可以使用 foo id 等与其他表连接 在 sqlite 中我可以说
  • iOS 中的等宽字体是什么?

    我想要在我的 iOS 应用程序中为 UILabel 使用等宽字体 不幸的是 我找不到一个 甚至 美国打字机 实际上也不是等宽的 XCode 中可用的等宽字体是什么 iOS 等宽字体 Courier Courier Bold Courier
  • 如何将十六进制数组转换为 UIImage?

    有几个与使用 P25mi 动态打印图像相关的未解答问题 没有一个得到公认的答案 下面有几个链接 如何将图像转换为位图代码以便在 iPhone 中进行蓝牙打印 https stackoverflow com questions 1383828
  • UIImage:如何获取网站选项卡图标

    我正在开发一个 RSS 阅读器 我需要获取每个提要的图标 例如 如果我的提要是 google com 我想获取 G 图标并将其放入 UIImage 或其他内容中 关于如何实现这一目标有什么想法吗 最简单的方法是使用 Google NSStr
  • 如何在 EKRecurrenceRule 中设置一周中某一天的数组?

    我想在用户选择的特定日期每周添加事件 可以是一个或多个 也可以是一整天 我将用户选择的日期值存储在模型类变量中 但是 当我添加事件并选择日期时 假设今天是星期一 我选择星期二和星期三并保存 然后我查看周一和周三添加的 iPhone 日历 我
  • 播放(非库)Apple Music 内容 - 请求失败

    我正在尝试使用以下代码播放专辑 let predicate MPMediaPropertyPredicate value 1459938538 forProperty MPMediaItemPropertyAlbumPersistentID
  • 用于读取数据库模式的外部库或迷你语言?

    我正在考虑为我的妻子编写一个简单的数据库应用程序 但我对良好的编程实践很感兴趣 并且希望有一个人类可读的源来存储数据库模式 只是 我不知道有什么工具可以完成这项工作 而且我不敢相信它们不存在 可能我只是不知道该问谷歌什么 但我没有找到它们
  • ormlite 将日期读取为 'yyyy-MM-dd'

    我需要读取给我的 sqlite 数据库 因此我无法更改表中的日期格式 yyyy MM dd 当我尝试使用 ormlite 为我生成对象时 使用以下注释 DatabaseField columnName REVISION DATE dataT
  • 通用类不会将委托调用转发给具体子类

    鉴于以下情况 protocol EntityType var displayString String get extension String EntityType var displayString String return self

随机推荐

  • 致命错误:在非对象上调用成员函数 fetch_assoc() [重复]

    这个问题在这里已经有答案了 我正在尝试执行一些查询来获取有关某些图像的信息页面 我写了一个函数 function get recent highs view deleted images false lower this gt databa
  • 如何使用flask_sqlalchemy反映现有表

    我注意到一个方法 db reflect bind all app app 但我想知道如何使用它 如果您能提供帮助 我将不胜感激 from flask import Flask from flask sqlalchemy import SQL
  • 从不同的函数访问变量

    我有以下 HTML 代码 它创建一个按钮 单击该按钮时会在我的页面中创建一些问题 工作正常
  • 除了使用 TM_FILENAME_BASE 之外,还有其他方法可以修剪 TM_FILENAME 吗?

    我正在尝试为 redux 容器文件创建一个片段 该文件导入一些具有相同基本名称的反应文件 TM FILENAME BASE 非常适合从文件名中删除 js 但在本例中 我的组件文件的扩展名是 fun thing component js 容器
  • Unix:如何清除串口I/O缓冲区?

    我正在为标准 PC 串行端口开发 高级 C 接口 当我打开端口时 我想清除输入和输出缓冲区 以便不接收或发送以前使用该端口的数据 为此 我使用 tcflush 函数 然而 它不起作用 怎么可能 我的 端口开放 代码如下所示 是的 我使用 C
  • 如何检查变量是否只包含字母

    我尝试检查以下情况 bin bash line abc if line a z then echo INVALID fi 我得到INVALID作为输出 但为什么 没有检查是否 line仅包含 a z 范围内的字符 使用正则表达式匹配运算符
  • 虚拟属性和延迟加载

    根据定义 虚拟属性或方法是对要重写的子类可见的方法 但是 NHibernate 使用虚拟属性来确保延迟加载 我的问题不是关于NHibernate 而是如何使用虚拟属性来实现延迟加载 虚拟财产是否还有我不知道的隐藏行为 它们被声明为 virt
  • 我可以将更多参数传递给 Javascript 中的事件处理函数吗?

    我一直在尝试了解有关鼠标事件的更多信息 例如onmouseover onmouseout and onmousemove但没有太多信息 默认情况下 这些事件处理程序似乎只有一个参数 即事件本身 element onmouseover mou
  • 如何缓存将图像返回到asp.net mvc中视图的操作方法的输出?

    我已经阅读了很多有关缓存的文章 但没有一个真正完全符合我的需求 在我的 mvc 3 应用程序中 我有一个操作方法 GetImage 它返回图像类型的文件 然后我在视图中使用此方法来显示图像 img width 75 height 75 sr
  • boost iostream 映射文件和 boost 进程间映射文件之间有区别吗?

    我想在内存中创建一个映射的二进制文件 但是我不确定如何创建要映射到系统的文件 我多次阅读文档并意识到有两种映射文件实现 一种在 iostream 中 另一种在进程间中 你们知道如何将映射文件创建到共享内存中吗 我试图允许多线程程序读取以二进
  • 如何使用 Qt 在队列中创建多个线程?

    如何使用 Qt 在队列中创建逐步执行的线程 当一个线程完成时另一个线程启动 请给我一个代码示例 Look at Q线程池 http doc qt io qt 5 qthreadpool html 然而 正如 Frank 指出的 如果你一个接
  • 在图像上创建一个图层并通过触摸调整其坐标

    我需要在图像上创建一个图层 并调整该图层以适合图像并获取该图层的坐标 我需要通过触摸和捏合来调整图层 示例图像如下 我需要在 ios 中执行此操作 我可以得到任何想法来执行此操作吗 使用coreImage的人脸检测API来检测人脸的Boun
  • 如何检查一条边是否具有 Networkx 中的属性

    我在 yEd 中创建了一个图 我想检查一条边是否具有属性 例如 有些边缘有标签 但有些则没有 当我尝试这样做时 出现错误 for n nbrs in G adjacency iter for nbr eattr in nbrs items
  • NSString 和 NSUrl 未正确转换

    因此 我尝试从来自 URL 的 XML 流中检索数据 该 URL 是根据用户输入的搜索字符串配置的 这段代码有什么理由不能工作吗 NSString searchString Geoff NSString updatedURL NSStrin
  • Outlook 中的电子邮件地址格式(EX 而不是 SMTP)

    我在 Excel 中有一个名字和姓氏列表 我想利用该列表使用 Visual Basic 在 Outlook 中查找电子邮件地址 我正在使用以下 VB 代码 Private Sub GetAddresses Dim o AddressList
  • Django 模板中的嵌套块

    The master我的 Django 应用程序中的模板如下所示 block parent Some text block child Default content here endblock child some more text e
  • Rails - 如何在数据库中存储“has_many”复选框关联?

    我有桌子User和桌子类别 这两个表之间的关系 user has many categories 类别belongs to user 我想在用户的 标准 编辑页面上显示带有复选框的类别列表 当该用户选中某些复选框时 我想保存它们 然后在下次
  • 暂停 MDB 消息处理,直到 @StartupBean 完成初始化

    在将 JBoss 5 应用程序迁移到 JBoss AS 7 7 1 1 FINAL 时 我遇到了新的 JMS 消息驱动 EJB 的问题 在消息处理中 必须检查一些主数据字段 为了提高性能 应使用以下方法将该主数据预加载到缓存结构中 Sing
  • 无法在数组适配器内的视图分页器中添加视图或膨胀

    我使用了一个名为 Swipe Cards by Diolor 的外部库 并将其附加到Array Adapter 在每张卡中我还需要制作一个View Pager带有显示用户当前正在查看的图像的条形 我遇到的问题是 当我设置OnPageChan
  • sqlite ios:尝试写入只读数据库

    我在项目中使用 sqlite 数据库 我可以执行像 SELECT 这样的查询 但无法执行 INSERT 在模拟器上 INSERT 工作正常 当我在 iPod 上编译时 就会出现以下错误消息 尝试写入只读数据库 认为这是文件的权利 我做了 c