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

时间:2021-01-23 20:17:22

标签: android kotlin sqldelight

我在 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. 没有一个

谢谢

1 个答案:

答案 0 :(得分:0)

此主题已在此处的 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"
)
相关问题