唯一约束在Android的Room数据库中不起作用,可能是由于以下几个原因:
@PrimaryKey
或@Unique
注解来定义唯一约束。@Entity(tableName = "users", indices = {@Index(value = {"email"}, unique = true)})
public class User {
@PrimaryKey(autoGenerate = true)
public int id;
@ColumnInfo(name = "email")
public String email;
}
RoomDatabase.Callback
并在onCreate
或onOpen
方法中处理迁移。RoomDatabase.Callback callback = new RoomDatabase.Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
// 执行迁移代码
}
};
MyDatabase db = Room.databaseBuilder(context, MyDatabase.class, "my-database")
.addCallback(callback)
.build();
indices
属性但索引未正确创建,也可能导致唯一约束不起作用。检查数据库是否正确创建了索引。解决这个问题的步骤:
参考链接:
如果问题仍然存在,可以尝试在onCreate
方法中手动添加唯一约束:
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
super.onCreate(db);
db.execSQL("CREATE UNIQUE INDEX unique_user_email ON users(email);");
}
确保在实际应用中谨慎使用手动SQL语句,以避免潜在的安全风险。
领取专属 10元无门槛券
手把手带您无忧上云