问题标签 [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.

0 投票
1 回答
239 浏览

swift - 如何使用 GRDB 设置内部联接

SQLite.Swift 版本有效。使用 GRDB 版本时,应用程序崩溃,我收到以下错误。线程 1:致命错误:数据库方法不可重入。

我在 GRDB 版本上做错了什么。

这是 SQLite.Swift 版本。

这就是我所拥有的 GRDB 版本。

0 投票
1 回答
96 浏览

ios - 如何使用 GRDB 将项目添加到结构中但不在 Db 表中的数组中

在 Db 的 My_Quotes 表(参见下面的 MyQuotes 结构)中,我存储了从设备上的用户联系人中选择的联系人的 ID。这样,如果联系人信息发生更改,ID 将保持不变。因此,我从 Db 中的 My_Quotes 表中提取 ContactID,并使用它通过 func get_ContactName_Org 构建 ContactFullName、ContactFirst、ContactLast 和 ContactOrg。

我遇到的问题是 ContactFullName、ContactFirst、ContactLast 和 ContactOrg(请参阅下面的 QuoteList 结构)不在 My_Quotes 表中。错误是:致命错误:无法从缺少的列 ContactFullName 中读取字符串

我理解错误,但将这些项目添加到 My_Quotes 表中会导致许多其他问题。如何将这些项目插入到数组中?

0 投票
0 回答
65 浏览

swift - 查询时 SQLite 比预期慢

我有一个相当大(3,000,000 行)的 SQLite 数据库。它由一张桌子组成。该表有一个整数 id 列、一个基于文本的标记列、一个保存为 int 的时间戳列和 15 个双精度列。我在标签和时间戳列上有一个唯一索引,因为我总是使用两者来查找条目。

我需要运行数据库并进行大量计算。主要是调用一堆select语句。选择语句的复杂性非常简单。我正在使用 GRDB 库。

这是一个示例查询。

当我对我的程序生成的查询(使用explain query plan)运行调试跟踪时,我可以看到正在使用索引。

我必须遍历很多查询,所以我对一部分查询进行了基准测试。我发现 600 个查询大约需要 28 秒。我在 10 核 iMac Pro 上运行该程序。这似乎很慢。我一直认为 SQLite 更快。

循环中的其他代码基本上将某些数字相加并可能创建一个平均值,因此没有什么复杂且计算量大的问题。

我试图通过将以下配置添加到数据库连接来加快速度。

我能做些什么来加快速度吗?GRDB 是否会减慢速度?我做错什么了吗?我应该使用不同的数据库,如 mySQL 之类的吗?

感谢您的任何提示/输入

0 投票
1 回答
40 浏览

ios - 如何在 SQlite 的数据库表中使现有的非可选字段成为可选字段?

我正在使用GRDB本地持久性。

Item表中创建具有以下约束的列。

table.column(Item.CodingKeys.text.rawValue, .text).notNull()

现在我想更改它以支持可选值。

table.column(Item.CodingKeys.text.rawValue, .text)

但是为了迁移,我不能改变它的属性。仅add, rename适用于列。

在保持向后兼容性的同时,我应该采取什么方法来正确迁移?

0 投票
1 回答
95 浏览

ios - 如何使用枚举值作为 GRDB 记录中的列?

我想记录4种不同的类型。我有以下代码

现在它抱怨Type 'Record' does not conform to protocol 'Decodable'

当然,当我从结构中删除类型时,这种抱怨就消失了。由于类型在技术上是 Int16,为什么这使它不可解码?

0 投票
3 回答
206 浏览

swift - 一个实体具有多个相同类型的属性的多对多关系

我不确定如何表达这一点,这可能是我找不到任何信息的原因,但我有一个多对多的关系,其中一个实体具有许多其他实体的多个属性。

例如,以ArtistandSong关系为例。一个艺术家可以有很多歌曲,而一首歌可以有很多艺术家。但是,一首歌可以有(许多)主要艺术家、(许多)特色艺术家和(许多)专辑艺术家。所以这些都来自同一张表,但我不确定如何建模。

在代码中,我在 Swift 中使用 GRDB,因此我遵循以下文档

我想如果一首歌中只有“艺术家”的话,这会很好。但是对于一首歌,我有 3 种不同类型的艺术家(主要、精选、专辑艺术家),但它们都来自同一个 Artist 表。

解决这个问题的最佳方法是什么?

0 投票
1 回答
120 浏览

ios - 如何在 Swift 中使用 GRDB 创建多对多关联?

我正在尝试在歌曲和专辑之间建立关联。每首歌可以出现在一个或多个专辑中,并且每个专辑可以包含一首或多首歌曲。我决定为我的数据库解决方案使用GRDB,但我被困在这个问题上。

我尝试了什么:正如文档所示,我创建了一个passport结构,如下所示:

然后在 SPTTrack 类中:

在 SPTAlbum 类中:

我在文档中找不到关于如何使用这些关联构建请求的好例子。在 SPTAlbum 类中,我添加了linkedTracks属性

然后在我的数据库管理器中:

我收到错误:

SQLite 错误 1:没有这样的表:albumPassport

这是不言自明的,但我不知道应该如何以及在哪里为AlbumPassport结构创建表,如果有任何其他步骤我应该采取实际使用专辑/曲目连接填充此表。

SPTTrack/SPTAlbum 都有一个名为的字段,该字段在第一次迁移期间id设置。primaryKey

0 投票
0 回答
28 浏览

sqlite - SQLite 请求特定日期之间的日历事件

我正在使用 SQLite 包装器GRDB并尝试在特定日期之间请求日历事件。我的表格的缩写版本Event如下。

ID 标题 开始时间 时间结束 isAllDay
1 会议 1 2021-10-16 14:15:00.000 2021-10-16 17:15:00.000 0
2 会议 2 2021-10-16 16:15:00.000 2021-10-16 17:15:00.000 0
3 假期 2021-10-16 00:00:00.000 2021-10-17 00:00:00.000 1

目前我有一个看起来像这样的请求

除全天活动外,此请求工作正常。数据库以 UTC 格式存储日期,全天事件的时间为 0:00。为了说明这个问题,我的时区是 UTC-3。考虑到上述数据,如果我请求 10 月 16 日的开始和结束之间的事件,则响应会省略全天事件(UTC stanrttime 为 0:00),因为我的开始时间转换为 UTC是 3:00。

我考虑更新全天的开始和结束时间以反映当前时区,但我很快就打消了这个想法,因为如果用户更改时区,我也会遇到同样的问题。我还考虑过使用isAllDay布尔值以不同的方式处理这些事件,但我无法设计解决方案。关于如何实现请求的任何建议?

0 投票
1 回答
211 浏览

ios - 如何使用 GRDB Swift 迁移更改列类型?

我有几个表格UUID,它们的列类型。

我想将这些列转换为,String而不是UUID因为调试很麻烦(例如,使用DB Browser for SQLite浏览sqlite文件需要我执行 SQL 查询,只是为了将对象转换为s 以查看 id 值。UUIDString

回到这个问题,最实用的方法是什么?

我正在考虑,并且即将做,但我想先问这个:

  1. 在 中registerMigration,创建一个新表。
  2. 新表现在有字符串列。
  3. 循环遍历旧表的行,并将这些行移动到新表中,但要确保 id 现在在Strings 中而不是UUIDs 中。
  4. 丢弃旧表
  5. 将新表重命名为旧表的名称。
0 投票
1 回答
46 浏览

ios - 使用最近的 XCode 更新编译错误

我最近将 XCode 更新到 13.2.1,但我的项目现在出现了以前从未存在过的编译错误。这与本地数据库的库 GRDB.swift 有关。

我将不胜感激。提前致谢。

在此处输入图像描述