Я хочу создать базу данных, используя место в kotlin, но каждый раз, когда я запускаю приложение, эта ошибка появляется. Сначала он работал, но после того, как я изменил его таблицу, она перестала работать.
C:\androidx\quickDoctor\app\build\tmp\kapt3\stubs\debug\com\example\quickdoctor\dao\AppointmentDao.java:11: error: There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (no such table: appointment)
public abstract
androidx.lifecycle.LiveData<java.util.List<com.example.quickdoctor.data.Appointment>> getAppointments(int idP);
^C:\androidx\quickDoctor\app\build\tmp\kapt3\stubs\debug\com\example\quickdoctor\dao\AppointmentDao.java:15: error: There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (no such table: appointment)
public abstract java.util.List<com.example.quickdoctor.data.Appointment> getAll();
^C:\androidx\quickDoctor\app\build\tmp\kapt3\stubs\debug\com\example\quickdoctor\dao\AppointmentDao.java:19: error: There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (no such table: appointment)
public abstract java.lang.Object deleteAll(@org.jetbrains.annotations.NotNull()
^C:\androidx\quickDoctor\app\build\tmp\kapt3\stubs\debug\com\example\quickdoctor\dao\AppointmentDao.java:24: error: com.example.quickdoctor.dao.AppointmentDao is part of com.example.quickdoctor.roomDb.Appointment2DB but this entity is not in the database. Maybe you forgot to add com.example.quickdoctor.data.Appointment to the entities section of the @Database?
public abstract java.lang.Object insert(@org.jetbrains.annotations.NotNull()
Также этот:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> java.lang.reflect.InvocationTargetException (no error message)
Я собираю, перестраиваю, очищаю свой проект, делаю недействительным кеш и перезапускаю, но ничего работал
Мой класс сущности:
@Entity(
tableName = "appointment"
)
data class Appointment(
@PrimaryKey
@ColumnInfo(name = "id")
val id:Int,
@ColumnInfo(name = "nameDoctor")
val nameDoctor: String,
@ColumnInfo(name = "nameHospital")
val nameHospital: String,
@ColumnInfo(name = "idPacient")
val idPacient: Int,
@ColumnInfo(name = "date")
val date: Date,
@ColumnInfo(name = "hour")
val hour: String,
@ColumnInfo(name = "title")
val title: String,
@ColumnInfo(name = "info")
val info: String)
Мой класс Dao:
@Dao
interface AppointmentDao {
@Query("SELECT * FROM appointment WHERE idPacient =:idP order by date desc")
fun getAppointments(idP: Int): LiveData<List<Appointment>>
@Query("SELECT * FROM appointment")
fun getAll(): List<Appointment>
@Query("DELETE FROM appointment")
suspend fun deleteAll()
@Insert (onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(app: Appointment)
}
Мой класс базы данных назначения
@Database(entities = [Appointment::class], version = 1, exportSchema = false)
@TypeConverters(Convertors::class)
abstract class AppointmentDatabase : RoomDatabase() {
abstract fun appointmentDao(): AppointmentDao
companion object {
@Volatile
private var INSTANCE: AppointmentDatabase? = null
fun getDatabase(context: Context, scope: CoroutineScope): AppointmentDatabase {
val inst = INSTANCE
if (inst != null) {
return inst
}
val instance =
Room.databaseBuilder(
context.applicationContext,
AppointmentDatabase::class.java,
"app1_db"
)
.addCallback(WordDatabaseCallback(scope))
.build()
INSTANCE = instance
return instance
}
private class WordDatabaseCallback(private val scope: CoroutineScope) :
RoomDatabase.Callback() {
override fun onOpen(db: SupportSQLiteDatabase) {
super.onOpen(db)
INSTANCE?.let { database ->
scope.launch(Dispatchers.IO) {
populateDatabase(database.appointmentDao())
}
}
}
}
suspend fun populateDatabase(bookDao: AppointmentDao) {
bookDao.deleteAll()
}
}
}
и преобразователь class:
class Convertors {
@TypeConverter
fun fromTimestamp(value: Long?): Date? {
return value?.let { Date(it) }
}
@TypeConverter
fun dateToTimestamp(date: Date?): Long? {
return date?.time?.toLong()
}
}
Что я делаю не так?