微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Sqldelight 1.4 如何在没有primarykey(id)的情况下插入填充数据生成的对象

如何解决Sqldelight 1.4 如何在没有primarykey(id)的情况下插入填充数据生成的对象

我在 Android 应用程序中将数据保存到 sqldelight 1.4 时遇到问题。

我创建了表:

CREATE TABLE myTable(
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,name TEXT
);

在 repo 类中,我有以 myTable 对象作为参数的插入函数

fun insert(item: myTable) {
     myTableQueries.insert( 
        name = item.name
     )
}

并且在某些操作中,我尝试创建带有名称但没有 id 的新对象表,因为 id 是自动递增的。 我还没有找到任何信息如何做到这一点。 哪个是最好的解决方案?

  1. 新建一个类(myTablexpress),参数与数据类(myTable)相同,在repo类的insert函数的参数中使用这个对象,并使用这些参数?
  2. 不是在 action 类中创建新的 myTable 实例,而是使用插入函数并将字符串值作为参数?
myTableviewmodel.insert(name)
  1. 创建没有 id 的新类 myTable
@Parcelize
class myTable(val name: String) : Parcelable

在视图模型中使用参数?

  1. 没有一个

谢谢

解决方法

此主题已在此处的 sqldelight 问题中讨论过:https://github.com/cashapp/sqldelight/issues/1284

您可以在 .sq 文件中使用 insert 参数为所有变量定义 sqlite ? 语句,如 sqldelight 的文档所述:https://cashapp.github.io/sqldelight/android_sqlite/

示例:

CREATE TABLE hockeyPlayer (
  id INTEGER PRIMARY KEY AUTOINCREMENT,player_number INTEGER NOT NULL,full_name TEXT NOT NULL
);

insert:
INSERT INTO hockeyPlayer
VALUES (?,?,?);

并且从您的 Kotlin 代码中,您可以传递 null 作为其 id,这使得自动增量工作:

query.insert(
  id = null,player_number = 100,full_name = "name"
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。