android - 如何使用 Room Persistence Library 从本地数据库更新文档?

标签 android android-room

提前致谢。这是我正在使用的界面。更新方法无效,所有其他方法均有效。

@Insert
void insertMultipleRecord(EnquiriesModel... enquiryEntities);

@Insert
void insertMultipleListRecord(List<EnquiriesModel> enquiriesModels);

@Insert
void insertOnlySingleRecord(EnquiriesModel enquiriesModel);

@Query("SELECT * FROM enquiries")
List<EnquiriesModel> fetchAllData();


@Update
void updateRecord(EnquiriesModel ... enquiriesModel);

@Delete
void deleteRecord(EnquiriesModel enquiriesModel);

@Query("DELETE FROM enquiries")
 void nukeTable();

这是我正在使用的模型类

@Entity(tableName = "enquiries")

@PrimaryKey(autoGenerate = true)
private int id;

protected EnquiriesModel(Parcel in) {
    id = in.readInt();
    email = in.readString();
    createdon = in.readString();
    childname = in.readString();
    relation = in.readString();
    updatedon = in.readString();
    dateofenquiry = in.readString();
    followup = in.readString();
    channel = in.readString();
    academicYear = in.readString();
    childDOB = in.readString();
    country = in.readString();
    countryCode = in.readString();
    country_name_code = in.readString();
    secodaryContact = in.readString();
    secodaryCountry = in.readString();
    secodaryCountryCode = in.readString();
    secodarycountry_name_code = in.readString();
    priority = in.readString();
    _id = in.readString();
    parentname = in.readString();
    mobile = in.readString();
    schoolid = in.readString();
    enqNote = in.readString();
    labelNames = in.readString();
    labels = in.readString();
    enquiriedPrograms = in.readString();
}

public static final Creator<EnquiriesModel> CREATOR = new Creator<EnquiriesModel>() {
    @Override
    public EnquiriesModel createFromParcel(Parcel in) {
        return new EnquiriesModel(in);
    }

    @Override
    public EnquiriesModel[] newArray(int size) {
        return new EnquiriesModel[size];
    }
};

@NonNull
public int getId() {
    return id;
}

public void setId(@NonNull int id) {
    this.id = id;
}
private String email;
private String createdon;
private String childname;
private String relation;
private String updatedon;
private String dateofenquiry;
private String followup;
private String channel;
private String academicYear;
private String childDOB;
private String country;
private String countryCode;
private String country_name_code;
private String secodaryContact;
private String secodaryCountry;
private String secodaryCountryCode;
private String secodarycountry_name_code;
private String priority;
private String _id;
private String parentname;
private String mobile;
private String schoolid;
private String enqNote;
private String labelNames;
private String labels;
private String enquiriedPrograms;

@Override
public String toString() {
    return "EnquiriesModel{" +
            "id=" + id +
            ", email='" + email + '\'' +
            ", createdon='" + createdon + '\'' +
            ", childname='" + childname + '\'' +
            ", relation='" + relation + '\'' +
            ", updatedon='" + updatedon + '\'' +
            ", dateofenquiry='" + dateofenquiry + '\'' +
            ", followup='" + followup + '\'' +
            ", channel='" + channel + '\'' +
            ", academicYear='" + academicYear + '\'' +
            ", childDOB='" + childDOB + '\'' +
            ", country='" + country + '\'' +
            ", countryCode='" + countryCode + '\'' +
            ", country_name_code='" + country_name_code + '\'' +
            ", secodaryContact='" + secodaryContact + '\'' +
            ", secodaryCountry='" + secodaryCountry + '\'' +
            ", secodaryCountryCode='" + secodaryCountryCode + '\'' +
            ", secodarycountry_name_code='" + secodarycountry_name_code + '\'' +
            ", priority='" + priority + '\'' +
            ", _id='" + _id + '\'' +
            ", parentname='" + parentname + '\'' +
            ", mobile='" + mobile + '\'' +
            ", schoolid='" + schoolid + '\'' +
            ", enqNote='" + enqNote + '\'' +
            ", labelNames='" + labelNames + '\'' +
            ", labels='" + labels + '\'' +
            ", enquiriedPrograms='" + enquiriedPrograms + '\'' +
            '}';
}

public EnquiriesModel() {

}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getCreatedon() {
    return createdon;
}

public void setCreatedon(String createdon) {
    this.createdon = createdon;
}

public String getChildname() {
    return childname;
}

public void setChildname(String childname) {
    this.childname = childname;
}

public String getRelation() {
    return relation;
}

public void setRelation(String relation) {
    this.relation = relation;
}

public String getUpdatedon() {
    return updatedon;
}

public void setUpdatedon(String updatedon) {
    this.updatedon = updatedon;
}

public String getDateofenquiry() {
    return dateofenquiry;
}

public void setDateofenquiry(String dateofenquiry) {
    this.dateofenquiry = dateofenquiry;
}

public String getFollowup() {
    return followup;
}

public void setFollowup(String followup) {
    this.followup = followup;
}

public String getChannel() {
    return channel;
}

public void setChannel(String channel) {
    this.channel = channel;
}

public String getAcademicYear() {
    return academicYear;
}

public void setAcademicYear(String academicYear) {
    this.academicYear = academicYear;
}

public String getChildDOB() {
    return childDOB;
}

public void setChildDOB(String childDOB) {
    this.childDOB = childDOB;
}

public String getCountry() {
    return country;
}

public void setCountry(String country) {
    this.country = country;
}

public String getCountryCode() {
    return countryCode;
}

public void setCountryCode(String countryCode) {
    this.countryCode = countryCode;
}

public String getCountry_name_code() {
    return country_name_code;
}

public void setCountry_name_code(String country_name_code) {
    this.country_name_code = country_name_code;
}

public String getSecodaryContact() {
    return secodaryContact;
}

public void setSecodaryContact(String secodaryContact) {
    this.secodaryContact = secodaryContact;
}

public String getSecodaryCountry() {
    return secodaryCountry;
}

public void setSecodaryCountry(String secodaryCountry) {
    this.secodaryCountry = secodaryCountry;
}

public String getSecodaryCountryCode() {
    return secodaryCountryCode;
}

public void setSecodaryCountryCode(String secodaryCountryCode) {
    this.secodaryCountryCode = secodaryCountryCode;
}

public String getSecodarycountry_name_code() {
    return secodarycountry_name_code;
}

public void setSecodarycountry_name_code(String secodarycountry_name_code) {
    this.secodarycountry_name_code = secodarycountry_name_code;
}

public String getPriority() {
    return priority;
}

public void setPriority(String priority) {
    this.priority = priority;
}

public String get_id() {
    return _id;
}

public void set_id(String _id) {
    this._id = _id;
}

public String getParentname() {
    return parentname;
}

public void setParentname(String parentname) {
    this.parentname = parentname;
}

public String getMobile() {
    return mobile;
}

public void setMobile(String mobile) {
    this.mobile = mobile;
}

public String getSchoolid() {
    return schoolid;
}

public void setSchoolid(String schoolid) {
    this.schoolid = schoolid;
}

public String getEnqNote() {
    return enqNote;
}

public void setEnqNote(String enqNote) {
    this.enqNote = enqNote;
}

public String getLabelNames() {
    return labelNames;
}

public void setLabelNames(String labelNames) {
    this.labelNames = labelNames;
}

public String getLabels() {
    return labels;
}

public void setLabels(String labels) {
    this.labels = labels;
}

public String getEnquiriedPrograms() {
    return enquiriedPrograms;
}

public void setEnquiriedPrograms(String enquiriedPrograms) {
    this.enquiriedPrograms = enquiriedPrograms;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(id);
    dest.writeString(email);
    dest.writeString(createdon);
    dest.writeString(childname);
    dest.writeString(relation);
    dest.writeString(updatedon);
    dest.writeString(dateofenquiry);
    dest.writeString(followup);
    dest.writeString(channel);
    dest.writeString(academicYear);
    dest.writeString(childDOB);
    dest.writeString(country);
    dest.writeString(countryCode);
    dest.writeString(country_name_code);
    dest.writeString(secodaryContact);
    dest.writeString(secodaryCountry);
    dest.writeString(secodaryCountryCode);
    dest.writeString(secodarycountry_name_code);
    dest.writeString(priority);
    dest.writeString(_id);
    dest.writeString(parentname);
    dest.writeString(mobile);
    dest.writeString(schoolid);
    dest.writeString(enqNote);
    dest.writeString(labelNames);
    dest.writeString(labels);
    dest.writeString(enquiriedPrograms);
}

public static class Labelnames {
    @Expose
    @SerializedName("values")
    private List<Values> values;

    public List<Values> getValues() {
        return values;
    }

    public void setValues(List<Values> values) {
        this.values = values;
    }

    public static class Namevaluepairs {
        @Expose
        @SerializedName("colourCode")
        private String colourcode;
        @Expose
        @SerializedName("name")
        private String name;
        @Expose
        @SerializedName("_id")
        private String Id;

        public String getColourcode() {
            return colourcode;
        }

        public void setColourcode(String colourcode) {
            this.colourcode = colourcode;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getId() {
            return Id;
        }

        public void setId(String Id) {
            this.Id = Id;
        }
    }

    public static class Values {
        @Expose
        @SerializedName("nameValuePairs")
        private Namevaluepairs namevaluepairs;

        public Namevaluepairs getNamevaluepairs() {
            return namevaluepairs;
        }

        public void setNamevaluepairs(Namevaluepairs namevaluepairs) {
            this.namevaluepairs = namevaluepairs;
        }
    }
}

public static class Enqnote {

    public String staffname;
    public String time;
    public String action;
    public String note;
    public String Id;

    public String getStaffname() {
        return staffname;
    }

    public void setStaffname(String staffname) {
        this.staffname = staffname;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note;
    }

    public String getId() {
        return Id;
    }

    public void setId(String Id) {
        this.Id = Id;
    }
}

我在 fragment 中这样调用更新。这里的 enquiriesModel 包含我的数据,按照 EnquiriesModel 类。我正在将数据从这样的 edittext 字段添加到查询模型。

AppDatabase  sampleDatabase = AppDatabase.getInstance(getActivity());
 enquiriesModel.set_id(enquiriesModel.get_id());
            enquiriesModel.setEmail(eMail.getText().toString().trim());
            enquiriesModel.setCreatedon(enquiriesModel.getCreatedon());
            enquiriesModel.setChildname(childName.getText().toString().trim());
            enquiriesModel.setRelation(relation1.getText().toString().trim());
            enquiriesModel.setUpdatedon(String.valueOf(tsLong));
            enquiriesModel.setDateofenquiry(dateofenquiry);
            enquiriesModel.setFollowup(followdate);
            enquiriesModel.setChannel(channel.getText().toString().trim());
            enquiriesModel.setAcademicYear(year.getText().toString().trim());
            enquiriesModel.setChildDOB(birthTime);
            enquiriesModel.setCountry(ccp.getSelectedCountryName());
            enquiriesModel.setCountryCode(ccp.getSelectedCountryCodeWithPlus());
            enquiriesModel.setCountry_name_code(ccp.getSelectedCountryNameCode());
            enquiriesModel.setSecodaryContact(mobile2.getText().toString().trim());
            enquiriesModel.setSecodaryCountry(ccp2.getSelectedCountryName());
            enquiriesModel.setSecodaryCountryCode(ccp2.getSelectedCountryCodeWithPlus());
            enquiriesModel.setSecodarycountry_name_code(ccp2.getSelectedCountryNameCode());
            enquiriesModel.setPriority((pri_check.isChecked())?"1":"0");
            enquiriesModel.setParentname(name.getText().toString().trim());
            enquiriesModel.setMobile(mobile.getText().toString().trim());
            enquiriesModel.setSchoolid(currentSchool.getSchoolid());
            Gson gson = new Gson();
            String enqNote = gson.toJson(enqNoteArray);
            String programarray = gson.toJson(programArray);
            enquiriesModel.setEnqNote(enqNote);
            String label = gson.toJson(labelsarray);
            JSONArray arraylabel = new JSONArray();
            for(int k =0;k<labellist.size();k++){
                JSONObject objectlabel = new JSONObject();
                objectlabel.put("type",labellist.get(k).getType());
                objectlabel.put("_id",labellist.get(k).get_id());
                objectlabel.put("name",labellist.get(k).getName());
                objectlabel.put("colourCode",labellist.get(k).getColourCode());
                arraylabel.put(objectlabel);

            }
            String labelnamearray = gson.toJson(arraylabel);
            enquiriesModel.setLabelNames(labelnamearray);
            enquiriesModel.setLabels(label);
            enquiriesModel.setEnquiriedPrograms(programarray);
            sampleDatabase.enquiryDao().updateRecord(enquiriesModel);

最佳答案

@Update 的替代方法是使用 @Query

@Query("UPDATE EnquiriesModel SET SOME_FIELD = :value WHERE EXISTING_FIELD = :existingValue;")
void updateStatus(String existingValue, String value);

关于android - 如何使用 Room Persistence Library 从本地数据库更新文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51593982/

相关文章:

安卓开发 : How To Replace Part of an EditText with a Spannable

android - 在房间中将 Flowable<List<Obj1>> 更改为 Flowable<List<Obj2>>

java - 将类型转换器与 Room 一起使用时出现 StackOverFlow 错误

Android LifeCycle - 当按下 Home 和 Back 键时

android - 房间数据库丢失数据

android - LiveData Room 进入后台时丢失数据

android - 房间数据库无法预填充数据并且未创建数据库文件

Android Canvas 路径实时性能

android - 将 fragment 添加到 Tab 主机

android - 关闭 PreferenceFragment