在过去的几天里,我一直对此表示怀疑。我有一个非常简单的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检查数据库时,主键没有一列而是两列。除了idSomeClass成员变量以外,没有其他重复的列-其他所有操作都按顺序进行。有谁知道为什么会这样吗?任何对此的见解将不胜感激。

最佳答案

实际上,我大部分时间都能弄清楚这一点。问题归结于使用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/

10-12 03:08