问题标签 [grdb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sqlite - 如何在 SwiftUI 应用程序中使用 GRDB 读取数据?
我正在尝试在此处遵循本指南:https ://elliotekj.com/2019/12/11/sqlite-ios-getting-started-with-grdb虽然有帮助,但它并不完全是一个教程。
到目前为止,我有这个代码:
应用数据库
在我的AppDelegate中,这段代码:
它认为以上是正确的。目前,我正在通过 Navicat 操作我的数据库,所以我知道我的表很好。但是现在我需要做什么才能简单地阅读我的表格?
这是我的 SwiftUI ContentView:
我真的不明白在 readPerson() 中写什么或将它放在我的视图中的什么位置。现在,我很乐意从表中填充我的文本字段,但当然,我想使用按钮添加人员。
swift - 如何从两个发布者 A 和 B 创建一个 Swift Combine 发布者,其中发布者 B 使用来自发布者 A 的值?
我想创建一个 Swift Combine 发布者,它可以实现以下目标:
- 发布者应该由默认值(一个Swift 包)的更改或GRDB sqlite 数据库值的更改(使用GRDBCombine)触发。
UserDefaults
- 从Defaults
UserDefaults
发布者收到的更新应该在GRDBCombine发布者的数据库查询中使用。
这是我迄今为止尝试过的简化版本:
但是,这个发布者会产生以下错误(根据上面我的发布者的简化版本进行编辑):
Cannot convert return expression of type 'AnyPublisher<Publishers.FlatMap<_, AnyPublisher<Defaults.KeyChange<Int>, Never>>.Output, Publishers.FlatMap<_, AnyPublisher<Defaults.KeyChange<Int>, Never>>.Failure>' (aka 'AnyPublisher<_.Output, Never>') to return type 'AnyPublisher<[Task], Never>'
我敢打赌,两个发布者的值不同是有问题的:[Task]
和Defaults.KeyChange<Int>
. 但是,我找不到解决此问题的方法。
swift - 在范围内找不到“CodingKeys”,错误不一致
我正在研究 GRDB 数据模型。我的问题可能源于使用测试版:版本 12.0 beta 2 (12A6163b)。
我在几个结构中出现了间歇性错误。Cannot find 'CodingKeys'
显示在几个结构定义中的几行。这发生在CodingKeys
指示行之前或之后的几行被接受之后。请参阅下面的示例代码。
我正在使用基于GRDB 文档的枚举。
我的数据模型有 13 个表和结构定义。Columns
此错误在枚举中的一两行上显示了六个结构定义。我找不到错误出现在哪一行的任何共同点。
下面示例中的错误,uuidCommodity 是一个 UUID 类型变量,但我也看到了 Date、String 和 Int 类型的行上的错误。
还有其他人看到这个问题吗?有人有什么建议吗?我昨晚向 Apple 反馈提交了这个,那里还没有答案,但现在是周末。
编辑:添加显式 CodingKeys 枚举使错误消失,但我仍然不知道为什么会出现初始错误。
ios - 将应用程序从 SQLite.swift 转换为 GRDB.swift
我正在尝试将我的几个应用程序转换为使用 GRDB.swift。有人有或知道我在哪里可以找到一个文件让我开始吗?我已经阅读了大多数 GRDB 文档,但我没有得到它。下面是一个示例场景。
这我能够从 SQLite.sift 转换
有人可以将其转换为 GRDB 以帮助我入门吗?
swift - 将应用程序从 SQLite.swift 转换为 GRDB.swift 第二个问题
我正在继续将我的一些应用程序从 SQLite.sift 转换为 GRDB.swift。我将我的结构转换为添加 Codable、FetchableRecord,以便让它们更好地与 GRDB 配合使用。这是在对我关于这个主题的第一篇文章的回复中提出的。
这是我正在寻找帮助重做的代码,因此它可以与 GRDB 一起使用。我的应用程序使用这种类型的代码从数据库表构建数组。很标准的流程。
到目前为止,这是我想出的。它不会产生任何警告或错误,但我很确定它并不完全正确。再次,提前感谢您的帮助。
ios - 如何使用 GRDB 在 iOS 上查询具有 1-1 关联的表?
在我的 iOS 项目中,我使用GRDB来管理 SQLite 数据库。我尝试查询具有 1-1 关联的表。
在我的数据库中,假设我有 2 个表:
这两个实体通过 1-1 关联链接,这要归功于idSong
.
这是我尝试过的:
Selection
实体:
Song
实体:
- 一个
SelectionSong
结构:
- 这是我创建这两个表的方式:
- 以下是我尝试获取 的列表的方法
SelectionSong
,因此我可以获得 的列表Selection
,以及每个Selection
相关的列表Song
:
但后来我收到以下错误:missing scope 'song'
。
那么如何查询我的Selection
表,以便获得SelectionSong
(aSelection
和关联的Song
)列表?
谢谢。
ios - GRDB 框架导致 TestFlight 崩溃:如何纠正这种情况?
我有一个可以在模拟和物理设备上完美运行的项目。它使用我创建的提供游戏逻辑的框架。最初这个框架包含一个访问 sqlite 的框架,GRDB。这似乎引起了问题,因为 App Store 验证不允许这种嵌套。
因此,我将 GRDB 移动到与游戏相同的层级,为了让它们进行通信,我的解决方案是让主 viewController 中的 GRDB 实例成为游戏的委托。我不介意这一点,在某些方面它改进了应用程序的结构。
但是我无法让app集成GRDB,线索似乎在这个,也就是项目的文件排列:
那些红色的项目一定是问题所在,但我不知道如何配置它来解决它。文档对我来说是不透明的,但我可以弄清楚这些项目不是项目本地的。选择单个红色 GRDB 框架文件表明它们用于非 iOS 目标,这是唯一的 iOS 项目。这也将用于生产,所以我也不需要测试。
这是在哪里配置的?还是我走错了路?当我通过 TestFlight 运行项目时,它在我的 iOS 设备上崩溃,每当我实例化 GRDB 框架时,在启动时,我已经发送了崩溃报告,但没有出现在 Organizer 中。
swift - SwiftUI FileDocument 使用 Sqlite 和 GRDB
在基于文档的 SwiftUI 应用程序中,我想使用 GRDB 作为 Sqlite 包装器将每个文档保存到单独的 Sqlite 文件中。在实现协议的文档中加载 Sqlite 文件很简单,方法是为要加载的文件FileDocument
创建一个DatabaseQueue
并使用其.backup(to:)
方法复制到内存中DatabaseQueue
。我应该如何在方法中实现保存func fileWrapper(configuration: WriteConfiguration)
?似乎没有明显的方法可以使用相同的.backup(to:)
方法。
我发现了 Andre Yonadam 的一个示例应用程序,它在 NSDocument 的子类中以相同的方式处理这个问题:
ios - 使用 GRDB 禁用或推迟外键强制执行以进行数据库迁移
我已经在我的移动应用程序中使用了 GRDB 库。所有当前功能都运行良好,我已经开始实施从早期数据库版本的迁移。为了与我在其他平台上的实现保持一致,我决定使用 SQLiteuser_version
而不是 GRDB 自己的迁移框架,它使用自己的表。
随着表的更改、复制、创建和删除,一个迁移步骤(数据库版本)中的更改发生相互依赖。由于在事务结束时提交更改,这会导致外键违规,升级失败。
解决此问题的一种方法是通过延迟(defer_foreign_keys
pragma)或暂时禁用它以设置foreign_keys
pragma 的事务来防止外键强制执行。不幸的是,我对这两种选择都不太满意。例如,经过一些测试注意到,尝试关闭外键检查
并使用阅读编译指示
或通过检查数据库表明foreign_keys
设置保持打开。
我的迁移步骤看起来稍微简化了,如下所示:
我最初的 GRDB 设置如下:
在数据库迁移期间防止这些外键失败的最佳方法是什么,为什么我的 pragma 语句不起作用?