我在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的变体。 怎么显示那样,我该怎么做?
答案 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中的所有模型