Sqldelight 1.4 如何在没有主键(id)的情况下插入填充数据生成对象
Posted
技术标签:
【中文标题】Sqldelight 1.4 如何在没有主键(id)的情况下插入填充数据生成对象【英文标题】:Sqldelight 1.4 how insert filled data generated object without primarykey (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 是自动递增的。 我没有找到任何信息如何做到这一点。 哪个是最好的解决方案?
-
新建一个类(myTablexpress),参数与数据类(myTable)相同,在repo类的insert函数的参数中使用这个对象,并使用这些参数?
不在action类中新建myTable实例,而是使用insert函数,将字符串值作为参数?
myTableViewModel.insert(name)
-
创建没有 id 的新类 myTable
@Parcelize
class myTable(val name: String) : Parcelable
在视图模型中使用参数?
-
没有一个
谢谢
【问题讨论】:
【参考方案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"
)
【讨论】:
以上是关于Sqldelight 1.4 如何在没有主键(id)的情况下插入填充数据生成对象的主要内容,如果未能解决你的问题,请参考以下文章