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 是自动递增的。
我没有找到任何信息如何做到这一点。
哪个是最好的解决方案?
- 新建一个class(myTablexpress),参数与数据class(myTable)相同,在参数中使用这个对象repo class 中的插入函数,并使用这些参数?
- 不是在操作中创建一个新的 myTable 实例 class,而是使用插入函数并将字符串值作为参数?
myTableViewModel.insert(name)
- 新建 class myTable 没有 id
@Parcelize
class myTable(val name: String) : Parcelable
并在视图模型中使用参数?
- 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"
)
我在 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 是自动递增的。 我没有找到任何信息如何做到这一点。 哪个是最好的解决方案?
- 新建一个class(myTablexpress),参数与数据class(myTable)相同,在参数中使用这个对象repo class 中的插入函数,并使用这些参数?
- 不是在操作中创建一个新的 myTable 实例 class,而是使用插入函数并将字符串值作为参数?
myTableViewModel.insert(name)
- 新建 class myTable 没有 id
@Parcelize
class myTable(val name: String) : Parcelable
并在视图模型中使用参数?
- 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"
)