sqldelight 1.4 insert填充数据生成对象无primarykey(id)怎么办

Sqldelight 1.4 how insert filled data generated object without primarykey (id)

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

我创建了 table:

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

在 repo class 中,我有一个以我的Table 对象作为参数的插入函数

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

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

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

并在视图模型中使用参数?

  1. none 个

谢谢

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

您可以在 .sq 文件中使用 ? 参数为所有变量定义 sqlite insert 语句,如 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"
)