Просто решение, которое кто-то написал мне, и которое, я думаю, может быть полезным:
Фон
Я просто хотел узнать, была ли таблица когда-либо изменена, поэтому я подумал, что, возможно, получение последнего сгенерированного идентификатора, это может быть способ сделать это, и, поскольку я знаю, что это значение должно быть где-то сохранено, его можно получить.
Моя идея:
Использование комнаты получить последний вставленный автоматически сгенерированный идентификатор (даже если ничего не было вставлено) без изменения таблицы или создать дополнительную таблицу.
Проблема
Я не смог найти способ сделать это, поэтому я просил об этом здесь и спросил здесь .
Что я нашел
Были некоторые ответы по StackOverflow для использования "last_insert_rowid", но я не смог его использовать.
Вот пример базы данных Room:
build.gradle
repositories {
maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
}
...
apply plugin: 'kotlin-android-extensions'
...
final def room_version = '2.1.0'
implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
...
D BProvider.kt
object DBProvider {
const val DB_NAME = "room.db"
lateinit var DB: MainDatabase
fun init(context: Context) {
// Log.d("AppLog", "DBProvider init")
DB = Room.databaseBuilder(context.applicationContext, MainDatabase::class.java, DB_NAME)
.addCallback(object : RoomDatabase.Callback() {
}).build()
}
@Database(
entities = [FavoriteSpeedDialDTO::class],
version = DB_VERSION,
exportSchema = false
)
abstract class MainDatabase : RoomDatabase() {
abstract fun favoriteSpeedDialDao(): FavoriteSpeedDialDao
abstract fun dao(): SpecialDao
}
}
FavoriteSpeedDialDao.kt
@Dao
abstract class FavoriteSpeedDialDao {
@Query("SELECT * FROM favorite_speed_dial")
abstract fun getFavoritesList(): MutableList<FavoriteSpeedDialDTO>
@Insert
abstract fun insert(item: FavoriteSpeedDialDTO): Long
@Query("DELETE FROM favorite_speed_dial")
abstract fun deleteAll(): Int
}
FavoriteSpeedDialDTO.kt
@Entity(tableName = "favorite_speed_dial")
@Parcelize
data class FavoriteSpeedDialDTO(@ColumnInfo(name = COL_ID) @PrimaryKey(autoGenerate = true) var id: Long,
@ColumnInfo(name = COL_ASSIGNED_PHONE_NUMBER) var phoneNumber: String) : Parcelable {
companion object {
const val COL_ID = BaseColumns._ID
const val COL_ASSIGNED_PHONE_NUMBER = "assigned_phone_number"
}
}
Вопрос
Используя Room, как получить последний сгенерированный идентификатор таблицы, даже если ничего не было добавлено к ней, когда-либо, а также когда она очищается?
Так как я уже нашел ответ, я отправил это, но если Вы думаете, что есть другое хорошее решение, не стесняйтесь отправлять это.