如何将以下json数据保存到两个表(模型表和变体表)中并根据模型获取数据

时间:2019-09-18 10:53:32

标签: android join inner-join android-room

我在sqlite中插入数据时遇到问题。我正在为此腾出空间。我需要加入表以获取数据。下面是我需要插入数据的json数据

[{
    "ImgPath": "",
    "ModelCode": "Model 1",
    "ModelDescription": "Model 1",
    "ModelID": "1",
    "VarientList": [{
        "MDescription": "APOLLO BLU",
        "MDescriptionLong": "APOLLO BLU",
        "MaterialID": "1",
        "MaterialImgPath": "",
        "Mcode": "APOLOL/CRSP/BLU",
        "ModelColor": ""
    }, {
        "MDescription": "APOLLO BLK",
        "MDescriptionLong": "APOLLO BLK",
        "MaterialID": "2",
        "MaterialImgPath": "",
        "Mcode": "APOLOL/CRSP/BLK",
        "ModelColor": ""
    }]
}, {
    "ImgPath": "",
    "ModelCode": "Model 2",
    "ModelDescription": "Model 2",
    "ModelID": "2",
    "VarientList": [{
        "MDescription": "SACE BROWN",
        "MDescriptionLong": "SACE BROWN",
        "MaterialID": "3",
        "MaterialImgPath": "",
        "Mcode": "SACE/BRN",
        "ModelColor": ""
    }, {
        "MDescription": "SACE BLU",
        "MDescriptionLong": "SACE BLU",
        "MaterialID": "4",
        "MaterialImgPath": "",
        "Mcode": "SACE/BLU",
        "ModelColor": ""
    }]
}]

我以此为参考 https://android.jlelse.eu/android-architecture-components-room-relationships-bf473510c14a

但是我有点困惑要从连接表中插入并获取数据。什么是属性将是外键以及如何为此编写可联接项。

//这是我的Item表的构造器

public ItemTable(String modelID, String modelCode, String modelDescription, String imgPath) {
        this.modelID = modelID;
        this.modelCode = modelCode;
        this.modelDescription = modelDescription;
        this.imgPath = imgPath;

    }

//这是我的Variant表构造函数

public VariantTable(String MDescription, String MDescriptionLong, String MaterialID, String imgPath,, String Mcode,String Mcode) {
        this.MDescription = MDescription;
        this.MDescriptionLong = MDescriptionLong;
        this.MaterialID = MaterialID;
        this.Mcode = Mcode;
    this.ModelColor = ModelColor;

    }

我想在一个表中插入模型,在第二个表中插入该模型的变体,并且我需要根据模型显示变体详细信息。例如,如果我选择了Model1,则必须在下拉列表中添加model1的变体。 怎么显示那样,我该怎么做?

1 个答案:

答案 0 :(得分:0)

这将帮助您从数据库获取数据

@Query("SELECT model.ModelCode, model.ModelID, model.ModelDescription, varient.MDescription as MDescription " +
            "FROM model " +
            "LEFT JOIN varient ON model.ModelID = varient.ModelID")
    List getModelsWithVarient();

编辑

首先为您的json创建模型

@Entity
public class MyModel {

    @PrimaryKey
    private String modelID;
    private String imgPath;
    private String modelCode;
    private String modelDescription;

    @Ignore
    private List<VarientList> varientList = null;

    public String getImgPath() {
        return imgPath;
    }

    public void setImgPath(String imgPath) {
        this.imgPath = imgPath;
    }

    public String getModelCode() {
        return modelCode;
    }

    public void setModelCode(String modelCode) {
        this.modelCode = modelCode;
    }

    public String getModelDescription() {
        return modelDescription;
    }

    public void setModelDescription(String modelDescription) {
        this.modelDescription = modelDescription;
    }

    public String getModelID() {
        return modelID;
    }

    public void setModelID(String modelID) {
        this.modelID = modelID;
    }

    public List<VarientList> getVarientList() {
        return varientList;
    }

    public void setVarientList(List<VarientList> varientList) {
        this.varientList = varientList;
    }

}

和一个Variant模型

@Entity(foreignKeys = @ForeignKey(entity = MyModel.class, parentColumns = "modelID", childColumns = "id"))
public class VarientList {

    @PrimaryKey(autoGenerate = true)
    int id;

    String modelID;

    private String mDescription;
    private String mDescriptionLong;
    private String materialID;
    private String materialImgPath;
    private String mcode;
    private String modelColor;

    public String getMDescription() {
        return mDescription;
    }

    public void setMDescription(String mDescription) {
        this.mDescription = mDescription;
    }

    public String getMDescriptionLong() {
        return mDescriptionLong;
    }

    public void setMDescriptionLong(String mDescriptionLong) {
        this.mDescriptionLong = mDescriptionLong;
    }

    public String getMaterialID() {
        return materialID;
    }

    public void setMaterialID(String materialID) {
        this.materialID = materialID;
    }

    public String getMaterialImgPath() {
        return materialImgPath;
    }

    public void setMaterialImgPath(String materialImgPath) {
        this.materialImgPath = materialImgPath;
    }

    public String getMcode() {
        return mcode;
    }

    public void setMcode(String mcode) {
        this.mcode = mcode;
    }

    public String getModelColor() {
        return modelColor;
    }

    public void setModelColor(String modelColor) {
        this.modelColor = modelColor;
    }

}

现在创建一个DAO界面以对db执行所有查询

@Dao
public interface MyModelDao {

    @Insert
    void insert(MyModel myModel);

    @Query("SELECT * FROM MyModel WHERE modelID=:modelID")
    List<MyModel> findAllModels(final int modelID);

    @Query("SELECT MyModel.ModelCode, " +
        "MyModel.ModelID, " +
        "MyModel.ModelDescription, " +
        "MyModel.imgPath, " +
        "VarientList.MDescription as MDescription, " +
        "VarientList.mDescriptionLong as mDescriptionLong, " +
        "VarientList.materialID as materialID, " +
        "VarientList.materialImgPath as materialImgPath, " +
        "VarientList.mcode as mcode, " +
        "VarientList.modelColor as modelColor " +
        "FROM model " +
        "LEFT JOIN VarientList ON MyModel.ModelID = VarientList.ModelID")
    List<MyModel> getModelsWithVarientList();
}

现在调用insert方法以插入记录并将完整的模型传递到其中。

要从模型调用getModelsWithVarientList()中获取所有变体,这将重新运行存储在db中的所有模型