【问题标题】:Sqldelight 1.4 how insert filled data generated object without primarykey (id)Sqldelight 1.4 如何在没有主键(id)的情况下插入填充数据生成对象
【发布时间】:2021-04-28 00:43:03
【问题描述】:

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

在视图模型中使用参数?

  1. 没有一个

谢谢

【问题讨论】:

    标签: android kotlin sqldelight


    【解决方案1】:

    这里的 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"
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      相关资源
      最近更新 更多