房间和重复的主键列

时间:2018-10-03 14:56:55

标签: android android-room

过去几天来,我一直对此表示怀疑。我有一个非常简单的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的{​​{1}}成员变量以外,没有其他重复的列-其他一切都按顺序进行。有谁知道为什么会这样吗?任何对此的见识将不胜感激。

1 个答案:

答案 0 :(得分:1)

实际上,我大部分时间都能弄清楚这一点。问题归结于使用Stetho来查看我的数据库。我所做的所有研究都无法解释为什么我的数据库中有重复的列,尤其是对于我的主键。因此,我使用a SQLite browser分析了数据库,并验证了我的主键列只显示了一次。然后,我到处搜索,发现其他与Stetho相似的问题:

Stetho showing two columns with same name

https://github.com/Raizlabs/DBFlow/issues/1436

考虑到所有这些,我将得出结论,我的数据库是正确创建的,并且这只是使用Stetho时的一个问题。