gpt4 book ai didi

java - 在带有 FTS4 的房间数据库中从 Long 更改为 Int of `rowid`

转载 作者:行者123 更新时间:2023-12-04 23:59:15 25 4
gpt4 key购买 nike

我正在使用新的库版本更新我的应用程序,但我的数据库出现问题。发布的应用程序当前使用带有 FTS4 的 Room 版本 2.2.6。当前有 LONG 的 rowid。该应用程序运行流畅,没有问题。但我想使用 Room 版本 2.3.0 并根据文档:

An FTS entity table always has a column named rowid that is the equivalent of an INTEGER PRIMARY KEY index. Therefore, an FTS entity can only have a single field annotated with PrimaryKey, it must be named rowid and must be of INTEGER affinity. The field can be optionally omitted in the class but can still be used in queries.

我应该使用 INT 而不是 LONG。

@Entity(tableName = "visit")
@Fts4
public class Visit {

@PrimaryKey
@ColumnInfo(name = "rowid")
private Long identification; //Change to int

}

有没有办法在不破坏用户数据的情况下更新属性?

最佳答案

An FTS entity table always has a column named rowid that is the equivalent of an INTEGER PRIMARY KEY index.

简而言之,SQLite 的 INTEGER 并不意味着 Java/Kotlin Integer/Int/int 它是一个列关联/类型。

如果您查看 Datatypes in SQLite 3 那么一个 INTEGER 最多可以是 8 个字节(64 位有符号)。在 Java/Kotlin 中是 long/Long。

可以通过 SQLiteDatabase 查看更多证据 insert方便的方法,因为它返回插入行的 id (rowid),而不是 int 而是 long。

Returns long - the row ID of the newly inserted row, or -1 if an error occurred.

SQLiteAutoincrement解释了 rowid,理论上它可以是 1-9223372036854775807(你甚至可以有负值)。

因此,在理论上使用 int/Int/Integer 作为 rowid 是错误的(在实践中不太可能),rowid 可以大于 int/Int/Integer。

I should use INT not LONG.

我建议您应该使用 Long。它对数据没有影响,因为 SQLite 将在尽可能小的空间中存储整数。此外,这对 room 创建的表没有影响,因为 COLUMN TYPE 将为 INTEGER。

关于java - 在带有 FTS4 的房间数据库中从 Long 更改为 Int of `rowid`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67979278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com