Sqldelight 1.4 如何插入填充数据生成没有主键(id)的对象

mlo*_*y92 8 android kotlin sqldelight

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

我创建了表:

CREATE TABLE myTable(
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    name TEXT
);
Run Code Online (Sandbox Code Playgroud)

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

fun insert(item: myTable) {
     myTableQueries.insert( 
        name = item.name
     )
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

  1. 他们都没有

谢谢

sho*_*ano 12

这个主题已经在 sqldelight 问题中讨论过:https://github.com/cashapp/sqldelight/issues/1284

insert您可以使用所有变量的参数在 .sq 文件中定义 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 (?, ?, ?);
Run Code Online (Sandbox Code Playgroud)

您可以从 Kotlin 代码中传递null它的 id,这使得自动增量起作用:

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

insert:
INSERT INTO hockeyPlayer
VALUES (?, ?, ?);
Run Code Online (Sandbox Code Playgroud)