预播种室数据库不工作,但已在Kotlin中创建数据库
我正在尝试使用Room数据库在Kotlin中预设定数据库种子。当我构建并运行它并且创建了数据库时,它不会给我任何错误,但它不是种子 这是我的密码: 票价矩阵.kt预播种室数据库不工作,但已在Kotlin中创建数据库,kotlin,android-room,Kotlin,Android Room,我正在尝试使用Room数据库在Kotlin中预设定数据库种子。当我构建并运行它并且创建了数据库时,它不会给我任何错误,但它不是种子 这是我的密码: 票价矩阵.kt import androidx.room.Entity import androidx.room.PrimaryKey @Entity(tableName = "fare_matrix") data class FareMatrix( @PrimaryKey var id: Int = 0,
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "fare_matrix")
data class FareMatrix(
@PrimaryKey
var id: Int = 0,
val entry_plaza: Int? = null,
val exit_plaza: Int? = null,
val classification: Int? = null,
val amt_total: Int? = null,
val vat: Double? = null,
val payment_mode: Int? = null
)
票价矩阵dao
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
@Dao
interface FareMatrixDao {
@Insert
fun addFareMatrix(fareMatrix: List<FareMatrix>)
}
我怎样才能让它工作呢?也许你可以试试kotlin合作项目。到目前为止,您的代码是好的,但在插入数据的过程中可能有一些格式不好的地方。因此,我建议您使用kotlinx.coroutines,并在最后的invoke方法中使用类似
operator fun invoke(context: Context) = instance ?: synchronized(LOCK) {
instance ?: buildDatabase(context).also {
instance = it
GlobalScope.launch {
val POPULATED_FAREMATRIX_DATA = listOf<FareMatrix>(
FareMatrix(1,800,803,1,30,3.21,1),
FareMatrix(2,800,803,2,75,8.04,1),
FareMatrix(3,800,803,3,90,9.64,1),
FareMatrix(4,800,805,1,58,6.21,1),
FareMatrix(5,800,805,2,145,15.54,1)
)
POPULATED_FAREMATRIX_DATA.forEach { something -> it.getFareMatrixDao().addFareMatrix(something) }
}
}}
操作符乐趣调用(上下文:上下文)=实例?:已同步(锁定){
实例?:构建数据库(上下文)。另外{
实例=它
环球镜发射{
val填充的成本矩阵数据=列表(
票价矩阵(1800803,1,30,3.21,1),
票价矩阵(2800803,2,75,8.04,1),
票价矩阵(3800803,3,90,9.64,1),
票价矩阵(4800805,1,58,6.21,1),
票价矩阵(5800805,2145,15.54,1)
)
填充的\u FAREMATRIX\u DATA.forEach{something->it.getFareMatrixDao().addFareMatrix(something)}
}
}}
这应该很管用。其他一切看起来都很好
编辑:而您的构建数据库方法应以
.fallbackToDestructiveMigration().build()。您不需要添加任何其他内容也许您可以尝试使用kotlin协同程序。到目前为止,您的代码是好的,但在插入数据的过程中可能有一些格式不好的地方。因此,我建议您使用kotlinx.coroutines,并在最后的invoke方法中使用类似
operator fun invoke(context: Context) = instance ?: synchronized(LOCK) {
instance ?: buildDatabase(context).also {
instance = it
GlobalScope.launch {
val POPULATED_FAREMATRIX_DATA = listOf<FareMatrix>(
FareMatrix(1,800,803,1,30,3.21,1),
FareMatrix(2,800,803,2,75,8.04,1),
FareMatrix(3,800,803,3,90,9.64,1),
FareMatrix(4,800,805,1,58,6.21,1),
FareMatrix(5,800,805,2,145,15.54,1)
)
POPULATED_FAREMATRIX_DATA.forEach { something -> it.getFareMatrixDao().addFareMatrix(something) }
}
}}
操作符乐趣调用(上下文:上下文)=实例?:已同步(锁定){
实例?:构建数据库(上下文)。另外{
实例=它
环球镜发射{
val填充的成本矩阵数据=列表(
票价矩阵(1800803,1,30,3.21,1),
票价矩阵(2800803,2,75,8.04,1),
票价矩阵(3800803,3,90,9.64,1),
票价矩阵(4800805,1,58,6.21,1),
票价矩阵(5800805,2145,15.54,1)
)
填充的\u FAREMATRIX\u DATA.forEach{something->it.getFareMatrixDao().addFareMatrix(something)}
}
}}
这应该很管用。其他一切看起来都很好
编辑:而您的构建数据库方法应以
.fallbackToDestructiveMigration().build()。您不需要添加任何其他内容
@Insert
fun addFareMatrix(fareMatrix: FareMatrix)
operator fun invoke(context: Context) = instance ?: synchronized(LOCK) {
instance ?: buildDatabase(context).also {
instance = it
GlobalScope.launch {
val POPULATED_FAREMATRIX_DATA = listOf<FareMatrix>(
FareMatrix(1,800,803,1,30,3.21,1),
FareMatrix(2,800,803,2,75,8.04,1),
FareMatrix(3,800,803,3,90,9.64,1),
FareMatrix(4,800,805,1,58,6.21,1),
FareMatrix(5,800,805,2,145,15.54,1)
)
POPULATED_FAREMATRIX_DATA.forEach { something -> it.getFareMatrixDao().addFareMatrix(something) }
}
}}