问题标签 [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.
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(?,?, ?,?)
database-migration - 没有关于如何在 SQLDelight 中迁移现有数据库的适当文档
在一些堆栈溢出答案中说 1.create new table and drop old tables。怎么做?2.sqm文件有什么用,什么时候需要用到?3.什么是在build.gradle中声明sqllight db时使用deriveSchemaFromMigrations标志
mysql - SqlDelight、MySql 和 Flow:在数据库更改时未调用 Flow 的 collect lambda
我正在使用 Kotlin 和 Flow 来使用查询结果的普通 JVM 项目中使用 MySql 和 Hikary 数据源来玩 SqlDelight。查询的第一次执行按预期返回数据,但是当数据库上的数据发生更改时不会触发 Flow#emit()。
这是我正在调用的存储库功能:
这是调用存储库函数的主要函数:
我已经尝试调试底层代码,并且注册了 Query 对象上的侦听器,并且在执行存储库函数时正确阻止了 main。还有其他人经历过类似的事情吗?
sqldelight - 在哪里可以找到 iOS 测试的数据库文件
我已经为 iOS 的本机驱动程序设置了测试。但是,我注意到 iOS 数据库在我的测试之间没有完全拆除的一些问题,如果可能的话,我想删除文件以重新开始,但我实际上并不知道它的存储位置。
我在哪里可以找到 iOS 数据库文件(特别是在测试期间),或者是否有一个我不知道的 api 允许我通过 SQLDelight 删除它?
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 构建中编译。
所以我的问题是:
- 为什么SQLDelight会覆盖
kotlinx-coroutines-core
版本? - 为什么Ktor只想要
kotlinx-coroutines-core
带有native-mt
后缀的版本? - 我该如何解决这个版本问题?
android - Android SQLDelight - 不可为空的字段上的“NOT NULL 约束失败”
基本上如标题所说。
我有一个声明为 NOT NULL 的 UUID 字段:
该字段是从我们模型类中的不可为空字段映射的:
但是Non-fatal Exception: android.database.sqlite.SQLiteConstraintException
在 Crashlytics 中为该字段记录的非致命事件数量并不多。这怎么可能?
有问题的模型/表有其他 NOT NULL UUID 字段似乎没有这个问题。
android - 未生成 Sqldelight 数据库架构
我有一个 KMM 项目并想使用SqlDelight
库,但是当我构建项目时没有生成数据库模式和表实体。
我已经在我的共享模块中定义了 sqldelight 文件夹,并且还为功能生成的 kotlin 类创建了文件夹,因为它是在其中配置的,并且在文件夹中gradle.build.kts
还有一个*.sq
文件sqldelight
当我运行generateSqlDelightInterface
任务时,我只看到那些日志
这是我的完整build.gradle.kts
和顶级build.gradle
classpath "com.squareup.sqldelight:gradle-plugin:$sqlDelight"
更新
我的项目文件夹结构
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'
我需要在以下条件下解决此问题:
- SQLDelight定义在Library层(包括.sq,驱动实际定义),可以部署为android lib或iOS框架
- 它可以稍后在客户端应用程序中实现为依赖项(例如:Android / iOS)
谢谢
android - 如何查看/更新数据库版本?有没有像“fallbackToDestructiveMigration”这样的东西?
通过重命名其中一个表并添加一个表来修改sq文件后,我没有找到任何地方可以指定数据库架构或版本已更改,并且我不想迁移 - 只需重新创建数据库。官方网站上的文档不包含有关此的任何信息。
项目可以编译,但是当我在 Android 和 iOS 上运行该应用程序时,我遇到了运行时崩溃,并且在日志中它说添加的表不存在。
我尝试在共享模块的 build.gradle.kts 中添加版本,但我仍然遇到运行时崩溃:
我不想删除并重新安装该应用程序。理想的解决方案是类似于fallbackToDestructiveMigration Room 数据库
我发现这个关于破坏性迁移的讨论。最后的评论建议在特定于平台的驱动程序中处理它,但它没有显示如何做到这一点。
所以我的问题是:
- 如何更改数据库版本?
- 如何设置破坏性迁移?
我希望文档在各种主题上更详细。对于像我这样对 Sqlite 不是很有经验的开发人员来说,它可以更容易地找到正确的信息。
kotlin - 可以为 SQLDelight 生成的类覆盖 toString 吗?
我正在使用 SQLDelight 为我正在开发的应用程序生成模型。有没有办法为生成的数据类指定自定义 toString 方法?我意识到我可以创建一个子类并覆盖它,但我不想这样做。