2

我在 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. 不在动作类中创建新的 myTable 实例,而是使用插入函数并将字符串值作为参数?
myTableViewModel.insert(name)
  1. 创建没有 id 的新类 myTable
@Parcelize
class myTable(val name: String) : Parcelable

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

  1. 他们都没有

谢谢

4

1 回答 1

3

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

您可以使用所有变量的参数在 .sq 文件中定义您的 sqliteinsert语句,正如 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"
)
于 2021-02-23T05:50:05.577 回答