错误崩溃RoomRate原因:android.database.sqlite.SQLiteConstraintException:唯一约束失败:products.id(代码1555)

时间:2019-08-10 16:43:38

标签: android kotlin android-room

房间无法验证数据完整性。看起来您已更改架构,但忘记更新版本号。您只需增加版本号即可解决此问题。

product.kt


package com.store.bamboo.model.room

import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.google.gson.annotations.SerializedName

@Entity(tableName = "products")
data class Product(
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    val id: Int,
    @SerializedName("name")
    @ColumnInfo(name = "name")
    var name: String,
    @SerializedName("description")
    @ColumnInfo(name = "description") var description: String,
    @SerializedName("units")
    @ColumnInfo(name = "units") var units:Int,
    @SerializedName("price")
    @ColumnInfo(name = "price") var price: Double,
    @SerializedName("off")
    @ColumnInfo(name = "off") var off: Double,
    @SerializedName("image")
    @ColumnInfo(name = "image") var image: String
)

AppDatabase.kt

package com.store.bamboo.model.room

import androidx.room.Database
import androidx.room.RoomDatabase

@Database(entities = arrayOf(Product::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun productDao(): ProductDao
}

错误代码:1555(SQLITE_CONSTRAINT_PRIMARYKEY)     原因:由于违反约束而中止。         (唯一约束失败:products.id(代码1555))     ################################################ ###############         在io.reactivex.internal.functions.Functions $ OnErrorMissingConsumer.accept(Functions.java:704)         在io.reactivex.internal.functions.Functions $ OnErrorMissingConsumer.accept(Functions.java:701)         在io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)         在io.reactivex.internal.operators.observable.ObservableObserveOn $ ObserveOnObserver.checkTerminated(ObservableObserveOn.java:281)         在io.reactivex.internal.operators.observable.ObservableObserveOn $ ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)         在io.reactivex.internal.operators.observable.ObservableObserveOn $ ObserveOnObserver.run(ObservableObserveOn.java:255)         在io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)         在io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)         在java.util.concurrent.FutureTask.run(FutureTask.java:237)         在java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)         在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)         在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:607)         在java.lang.Thread.run(Thread.java:762)      造成原因:android.database.sqlite.SQLiteConstraintException:唯一约束失败:products.id(代码1555)     ################################################ ###############     错误代码:1555(SQLITE_CONSTRAINT_PRIMARYKEY)     原因:由于违反约束而中止。         (唯一约束失败:products.id(代码1555))

1 个答案:

答案 0 :(得分:0)

实际上,您违反了主键唯一性。所以你得到了错误:

  

错误代码:1555(SQLITE_CONSTRAINT_PRIMARYKEY)原因:中止   限制违规行为。 (唯一约束失败:products.id(代码   1555))

我发现您的数据类具有主键,其引用为“ id”。但是您通过构造函数传递id。但是,您确定每次通过构造函数将id传递为唯一ID时都确定吗?我想不是。 因此请确保您传递id作为唯一值。