在过去的几天里,我一直对此表示怀疑。我有一个非常简单的Android Room设置。这是我的实体:
Entity(tableName = "some_table")
public class SomeClass {
@PrimaryKey(autoGenerate = true)
@NonNull
int id;
// Other member variables
public SomeClass() {
}
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
}
我的道也很简单:
@Dao
public interface SomeClassDao {
@Query("SELECT * FROM some_table")
List<SomeClass> getAll();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAll(List<SomeClass> someClass);
@Update
void update(SomeClass someClass);
@Delete
void delete(SomeClass someClass);
}
我的数据库也没有发生任何疯狂的事情:
@Database(entities = {SomeClass.class}, version = 1)
public abstract class SomeClassDatabase extends RoomDatabase {
public static final String DATABASE_NAME = "someApp";
public abstract SomeClassDao getDao();
}
我在应用程序类的
onCreate()
中创建数据库:public class SomeApp extends Application {
private static SomeClassDatabase sDatabase;
@Override public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
sDatabase = Room.databaseBuilder(this, SomeClassDatabase.class, SomeClassDatabase.DATABASE_NAME).build();
}
public static ForecastDatabase getDatabase(){
return sDatabase;
}
}
然后,在主要活动中,使用RxJava将数据插入数据库。我认为那部分不是问题的根源。如果是这样,请告诉我,我将更新我的帖子。
我面临的问题是,当我使用Stetho检查数据库时,主键没有一列而是两列。除了
id
的SomeClass
成员变量以外,没有其他重复的列-其他所有操作都按顺序进行。有谁知道为什么会这样吗?任何对此的见解将不胜感激。 最佳答案
实际上,我大部分时间都能弄清楚这一点。问题归结于使用Stetho来查看我的数据库。我所做的所有研究都无法解释为什么我的数据库中有重复的列,尤其是对于我的主键。因此,我使用a SQLite browser分析了数据库,并验证了我的主键列只显示了一次。然后,我到处搜索,发现其他与Stetho相似的问题:
Stetho showing two columns with same name
https://github.com/Raizlabs/DBFlow/issues/1436
考虑到所有这些,我可以得出结论,我的数据库是正确创建的,并且使用Stetho只是一个问题。
关于android - 房间和重复的主键列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52629954/