Android 房间强制重写 属性 通过自动增量值
Android Room force rewrite property by autoincrement value
我有一个标准的长字段
@PrimaryKey(autoGenerate = true)
val id:Long
但它是在过程中填充的,并且具有随机值。如果我尝试通过 DAO 将它添加到数据库中,那么 id 不会被 autoGenerate sqlite engine
覆盖
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(i:MyTypeObject)
如果我将此类型字段设置为 nullable,它也不起作用
@PrimaryKey(autoGenerate = true)
val id:Long?
有一种方法可以将 id 字段中的任何值强制转换为 db 中的自动增量值?
我从存储库 livedata 中接收数据。在视图模型中
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)
}
}
感谢大家的帮助。根据官方文档 "If the field type is long or int (or its TypeConverter converts it to a long or int), Insert methods treat 0 as not-set while inserting the item. " 你必须在 id 字段中添加 0 并自动增加。
另外,我的问题是对数据库数据文件的访问不正确。我在 Android stuidi® 上使用 "Device file explorer",在右键菜单上使用 "Save as"。 SQL数据调试的错误方式。正确访问其 adb 终端 shell 的数据。比如我的OS Win10 和数据库文件名=book.db, and datatable=nal
打开终端
cd %USERPROFILE%\AppData\Local\Android\sdk\platform-tools
adb root
adb devices
当时我的设备是"emulator-5554"
adb -s emulator-5554 shell
sqlite3
sqlite 内部 shell
.open /data/data/com.example.scotland/databases/book.db
select * from nal;
如果找不到数据库文件。尝试打开
View->ToolWindows->Device File explorer.
有你的ADB文件系统树。您必须打开
data->data->YouProjectName->databases
我有一个标准的长字段
@PrimaryKey(autoGenerate = true)
val id:Long
但它是在过程中填充的,并且具有随机值。如果我尝试通过 DAO 将它添加到数据库中,那么 id 不会被 autoGenerate sqlite engine
覆盖 @Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(i:MyTypeObject)
如果我将此类型字段设置为 nullable,它也不起作用
@PrimaryKey(autoGenerate = true)
val id:Long?
有一种方法可以将 id 字段中的任何值强制转换为 db 中的自动增量值?
我从存储库 livedata 中接收数据。在视图模型中
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)
}
}
感谢大家的帮助。根据官方文档 "If the field type is long or int (or its TypeConverter converts it to a long or int), Insert methods treat 0 as not-set while inserting the item. " 你必须在 id 字段中添加 0 并自动增加。
另外,我的问题是对数据库数据文件的访问不正确。我在 Android stuidi® 上使用 "Device file explorer",在右键菜单上使用 "Save as"。 SQL数据调试的错误方式。正确访问其 adb 终端 shell 的数据。比如我的OS Win10 和数据库文件名=book.db, and datatable=nal
打开终端
cd %USERPROFILE%\AppData\Local\Android\sdk\platform-tools
adb root
adb devices
当时我的设备是"emulator-5554"
adb -s emulator-5554 shell
sqlite3
sqlite 内部 shell
.open /data/data/com.example.scotland/databases/book.db
select * from nal;
如果找不到数据库文件。尝试打开
View->ToolWindows->Device File explorer.
有你的ADB文件系统树。您必须打开
data->data->YouProjectName->databases