android - Android Room强制通过自动增量值重写属性

标签 android kotlin dao

我有一个标准的长场

 @PrimaryKey(autoGenerate = true)
 val id:Long

但是它填充在过程中并且具有随机值。如果我尝试通过DAO将其添加到数据库中,则id不会被autoGenerate sqlite引擎覆盖
 @Insert(onConflict = OnConflictStrategy.REPLACE)
 fun insert(i:MyTypeObject)

如果我将此类型字段设为可为空,则它也无法正常工作
 @PrimaryKey(autoGenerate = true)
 val id:Long?

有一种方法可以将ID字段中的任何值都强制转换为db中的自动增量值?

我从存储库livedata中检索数据。在 View 模型中
private val db = CurrencyDatabase.getInstance(getApplication())
private val dao = db!!.nalDao()
private val service = Executors.newFixedThreadPool(1)

  fun addBook(book: CurrencyItem)
{
    service.submit {
        dao.insert(book)
    }
}

最佳答案

谢谢大家的帮助。通过官方文件“如果字段类型为long或int(或其TypeConverter将其转换为long或int),则插入方法在插入项目时将0设置为未设置。”您必须使用自动增量将0添加到id字段。

另外我的问题是对数据库数据文件的不正确访问。我在Androidstuidi®上使用“设备文件浏览器”,并在右键菜单上使用“另存为”。 SQL数据调试的错误方法。正确访问其adb终端 shell 的数据。例如,我的操作系统Win10和数据库文件名= book.db,数据表= nal

打开终端

cd %USERPROFILE%\AppData\Local\Android\sdk\platform-tools
adb root
adb devices

我的设备是“emulator-5554”
adb -s emulator-5554 shell
sqlite3

内壳
.open /data/data/com.example.scotland/databases/book.db
select * from nal;

如果找不到数据库文件。尝试打开
View->ToolWindows->Device File explorer.

有树您的ADB文件系统。你必须打开
data->data->YouProjectName->databases

关于android - Android Room强制通过自动增量值重写属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62007882/

相关文章:

java https ://localhost (SSL) - possible without installing certs on client?

unit-testing - DAO(又名存储库)是否应该进行单元测试?

Android mediaPlayer - 有 "isPrepared()"或 "getStatus()"方法吗?

android - 如何制作 4 个尺寸相同的 2x2 按钮

java - 消息传递应用程序 Android XML 的布局问题

kotlin - 为什么 Kotlin 多平台项目可以在 commonMain 中访问 kotlin.jvm 包?

kotlin - 如何使用gradle kotlin dsl为简单的控制台应用程序生成 'fatjar'

spring - 如何以编程方式在线程中获取事务管理器?

java - 对使用 Spring JDBC 的 DAO 类进行单元测试

android - 通过 Cygwin 在 Windows 上为 x86 Android 构建 Android NDK 工具链