问题标签 [sqldelight]

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 投票
0 回答
530 浏览

kotlin-multiplatform - 在 SQLDelight 中插入数据时没有这样的表

突然之间,我的示例项目无法向表中插入数据。它抱怨没有创建表。我的示例 GitHub(https://github.com/sreexamus/KMMSQLDelightPOC)删除了示例中的 SQM 文件并进行了尝试。不确定哪个插件会即时更新,从而破坏了这一点。

Android SDK:4.1 RC SQLDelight:1.4.3 KMM:0.1.3 发布 Kotlin:1.4.10

错误:

函数没有或继承 @Throws 注释,因此异常不会作为 NSError 从 Kotlin 传播到 Objective-C/Swift。相反,它被认为是意外和未处理的。程序将终止。未捕获的 Kotlin 异常:kotlin.Exception:android/database/sqlite/SQLiteException - 没有这样的表:事件(代码 1):,编译时:INSERT OR REPLACE INTO Events(eventName, eventType, attributes, trackedAt)VALUES(?,?, ?,?)

0 投票
0 回答
101 浏览

database-migration - 没有关于如何在 SQLDelight 中迁移现有数据库的适当文档

在一些堆栈溢出答案中说 1.create new table and drop old tables。怎么做?2.sqm文件有什么用,什么时候需要用到?3.什么是在build.gradle中声明sqllight db时使用deriveSchemaFromMigrations标志

0 投票
1 回答
165 浏览

mysql - SqlDelight、MySql 和 Flow:在数据库更改时未调用 Flow 的 collect lambda

我正在使用 Kotlin 和 Flow 来使用查询结果的普通 JVM 项目中使用 MySql 和 Hikary 数据源来玩 SqlDelight。查询的第一次执行按预期返回数据,但是当数据库上的数据发生更改时不会触发 Flow#emit()。

这是我正在调用的存储库功能:

这是调用存储库函数的主要函数:

我已经尝试调试底层代码,并且注册了 Query 对象上的侦听器,并且在执行存储库函数时正确阻止了 main。还有其他人经历过类似的事情吗?

0 投票
1 回答
25 浏览

sqldelight - 在哪里可以找到 iOS 测试的数据库文件

我已经为 iOS 的本机驱动程序设置了测试。但是,我注意到 iOS 数据库在我的测试之间没有完全拆除的一些问题,如果可能的话,我想删除文件以重新开始,但我实际上并不知道它的存储位置。

我在哪里可以找到 iOS 数据库文件(特别是在测试期间),或者是否有一个我不知道的 api 允许我通过 SQLDelight 删除它?

0 投票
1 回答
443 浏览

android - KMM: sqldelight:coroutines-extensions 将 kotlinx-coroutines-core 版本设置为 1.3.9

我在 share 模块的build.gradle.kts文件中有这些依赖项。

当我运行该应用程序时,一切都在 android 应用程序中运行良好。但是运行 ios 应用程序时出现运行时崩溃。在日志中,我看到这Ktor是在抱怨协程版本不是native-mt. 我不明白为什么,因为 1.4.# 版本的协程没有单独的本机多线程分支。

我查看了 External Libraries 文件夹,发现我的协程版本一直设置为 1.3.9。如果我删除com.squareup.sqldelight:coroutines-extensions一切都会再次正常工作。但是我需要Flow从 db 中使用该依赖项。

我尝试从 sqldelight 扩展中排除协程,但它没有在 Xcode 构建中编译。

所以我的问题是:

  1. 为什么SQLDelight会覆盖kotlinx-coroutines-core版本?
  2. 为什么Ktor只想要kotlinx-coroutines-core带有native-mt后缀的版本?
  3. 我该如何解决这个版本问题?

图片

0 投票
0 回答
121 浏览

android - Android SQLDelight - 不可为空的字段上的“NOT NULL 约束失败”

基本上如标题所说。

我有一个声明为 NOT NULL 的 UUID 字段:

该字段是从我们模型类中的不可为空字段映射的:

但是Non-fatal Exception: android.database.sqlite.SQLiteConstraintException在 Crashlytics 中为该字段记录的非致命事件数量并不多。这怎么可能?

有问题的模型/表有其他 NOT NULL UUID 字段似乎没有这个问题。

0 投票
2 回答
2238 浏览

android - 未生成 Sqldelight 数据库架构

我有一个 KMM 项目并想使用SqlDelight库,但是当我构建项目时没有生成数据库模式和表实体。

我已经在我的共享模块中定义了 sqldelight 文件夹,并且还为功能生成的 kotlin 类创建了文件夹,因为它是在其中配置的,并且在文件夹中gradle.build.kts还有一个*.sq文件sqldelight

当我运行generateSqlDelightInterface任务时,我只看到那些日志

这是我的完整build.gradle.kts

和顶级build.gradle

classpath "com.squareup.sqldelight:gradle-plugin:$sqlDelight"

更新

我的项目文件夹结构

0 投票
1 回答
340 浏览

kotlin-multiplatform - SQLDelight - java.lang.UnsatisfiedLinkError:找不到“libsqlitejdbc.so”

运行环境

SQLDelight 版本:1.4.3
应用操作系统:Android

错误描述

我正在尝试在库级别创建 SQLDelight 作为 kotlin 多平台库并将其部署为 android 库...

然后,当我将它作为依赖项添加到我的 Android 应用程序中时(单独的项目,因为我想将其视为稍后使用我的库的客户端),我遇到了以下堆栈跟踪的运行时问题:

它说没有找到“libsqlitejdbc.so”......,我犯错了吗?以及如何解决这个问题?

根据我了解的文档,我刚刚在我的 Android 应用程序中添加了以下依赖项:

implementation 'com.squareup.sqldelight:android-driver:1.4.3'

我需要在以下条件下解决此问题:

  1. SQLDelight定义在Library层(包括.sq,驱动实际定义),可以部署为android lib或iOS框架
  2. 它可以稍后在客户端应用程序中实现为依赖项(例如:Android / iOS)

谢谢

0 投票
1 回答
881 浏览

android - 如何查看/更新数据库版本?有没有像“fallbackToDestructiveMigration”这样的东西?

通过重命名其中一个表并添加一个表来修改sq文件后,我没有找到任何地方可以指定数据库架构或版本已更改,并且我不想迁移 - 只需重新创建数据库。官方网站上的文档不包含有关此的任何信息。

项目可以编译,但是当我在 Android 和 iOS 上运行该应用程序时,我遇到了运行时崩溃,并且在日志中它说添加的表不存在。

我尝试在共享模块的 build.gradle.kts 中添加版本,但我仍然遇到运行时崩溃:

我不想删除并重新安装该应用程序。理想的解决方案是类似于fallbackToDestructiveMigration Room 数据库

我发现这个关于破坏性迁移的讨论。最后的评论建议在特定于平台的驱动程序中处理它,但它没有显示如何做到这一点。

所以我的问题是:

  1. 如何更改数据库版本?
  2. 如何设置破坏性迁移?

我希望文档在各种主题上更详细。对于像我这样对 Sqlite 不是很有经验的开发人员来说,它可以更容易地找到正确的信息。

0 投票
0 回答
21 浏览

kotlin - 可以为 SQLDelight 生成的类覆盖 toString 吗?

我正在使用 SQLDelight 为我正在开发的应用程序生成模型。有没有办法为生成的数据类指定自定义 toString 方法?我意识到我可以创建一个子类并覆盖它,但我不想这样做。