【问题标题】:Delete all records using ORMlite before a particular date在特定日期之前使用 ORMlite 删除所有记录
【发布时间】:2017-09-13 01:24:55
【问题描述】:

我在我的一个应用程序中使用 Ormlite 数据库。现在我想从数据库中删除在特定日期之前存储的所有记录。举个例子:-

今天是 4 月 17 日。当用户通过应用程序在其中一个选项中选择一周时,则应从数据库中删除一周之前的所有记录,即 4 月 10 日之前和之后。

以下是我的 Object bean 类:-

public class AlertsDataClass extends BaseDataClass implements Parcelable {

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

    @Override
    public AlertsDataClass[] newArray(int size) {
        return new AlertsDataClass[size];
    }
};
@DatabaseField
private int alertId;
@DatabaseField
private String alertTitle;
@DatabaseField
private int alertLevel;
@DatabaseField
private String alertLog;
@DatabaseField
private int alertAssignee;
@DatabaseField
private String alertLocationId;
@DatabaseField
private int alertStatus;
@DatabaseField
private String alertStartTime;
@DatabaseField
private String alertUpdatedTime;
@DatabaseField
private String alertDeviceId;
@DatabaseField
private int alertActionNeeded;
@DatabaseField
private String alertAssigneeName;

public AlertsDataClass() {
}

protected AlertsDataClass(Parcel in) {
    alertId = in.readInt();
    alertTitle = in.readString();
    alertLevel = in.readInt();
    alertLog = in.readString();
    alertAssignee = in.readInt();
    alertAssigneeName = in.readString();
    alertLocationId = in.readString();
    alertStatus = in.readInt();
    alertStartTime = in.readString();
    alertUpdatedTime = in.readString();
    alertDeviceId = in.readString();
    alertActionNeeded = in.readInt();
}

public int getAlertId() {
    return alertId;
}

public void setAlertId(int alertId) {
    this.alertId = alertId;
}

public String getAlertTitle() {
    return alertTitle;
}

public void setAlertTitle(String alertTitle) {
    this.alertTitle = alertTitle;
}

public int getAlertLevel() {
    return alertLevel;
}

public void setAlertLevel(int alertLevel) {
    this.alertLevel = alertLevel;
}

public String getAlertLog() {
    return alertLog;
}

public void setAlertLog(String alertLog) {
    this.alertLog = alertLog;
}

public int getAlertAssignee() {
    return alertAssignee;
}

public void setAlertAssignee(int alertAssignee) {
    this.alertAssignee = alertAssignee;
}

public String getAlertLocationId() {
    return alertLocationId;
}

public void setAlertLocationId(String alertLocationId) {
    this.alertLocationId = alertLocationId;
}

public int getAlertStatus() {
    return alertStatus;
}

public void setAlertStatus(int alertStatus) {
    this.alertStatus = alertStatus;
}

public String getAlertStartTime() {
    return alertStartTime;
}

public void setAlertStartTime(String alertStartTime) {
    this.alertStartTime = alertStartTime;
}

public String getAlertUpdatedTime() {
    return alertUpdatedTime;
}

public void setAlertUpdatedTime(String alertUpdatedTime) {
    this.alertUpdatedTime = alertUpdatedTime;
}

public String getAlertDeviceId() {
    return alertDeviceId;
}

public void setAlertDeviceId(String alertDeviceId) {
    this.alertDeviceId = alertDeviceId;
}

public int getAlertActionNeeded() {
    return alertActionNeeded;
}

public void setAlertActionNeeded(int alertActionNeeded) {
    this.alertActionNeeded = alertActionNeeded;
}

public String getAlertAssigneeName() {
    return alertAssigneeName;
}

public void setAlertAssigneeName(String alertAssigneeName) {
    this.alertAssigneeName = alertAssigneeName;
}

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

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(alertId);
    dest.writeString(alertTitle);
    dest.writeInt(alertLevel);
    dest.writeString(alertLog);
    dest.writeInt(alertAssignee);
    dest.writeString(alertAssigneeName);
    dest.writeString(alertLocationId);
    dest.writeInt(alertStatus);
    dest.writeString(alertStartTime);
    dest.writeString(alertUpdatedTime);
    dest.writeString(alertDeviceId);
    dest.writeInt(alertActionNeeded);
}

}

在上述数据类中,“alertStartTime”是包含日期的字段,格式为“04/17/17 16:29”。现在当用户选择一周时,应该从数据库中删除“04/10/17 16:29”之前和之后的所有记录。

我根据两个字段删除记录。一种是“alertStatus”,其值应为 5,另一种是“alertStartTime”,其中应在日期前一周删除“04/10/17 16:29”之前和之前的所有记录。我希望你们能清楚地理解我的问题。

我的数据库删除记录方法如下:-

public void deleteCompleteAlerts(int alertStatus, String alertStartTime) {

    DeleteBuilder<AlertsDataClass, Integer> deleteBuilder = getAlertsDetailDao().deleteBuilder();
    try {
        Where<AlertsDataClass, Integer> where = deleteBuilder.where();
        int condCount = 0;
        if(alertStatus == 5){
            where.eq("alertStatus", alertStatus);
            condCount++;
        }
        if(alertStartTime.equalsIgnoreCase("04/14/17")){
            where.like("alertStartTime", "%" + alertStartTime + "%");
            condCount++;
        }
        if (condCount > 0) {
            where.and(condCount);

        }

        deleteBuilder.delete();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

在上面的方法中,我们要修改这个if语句如下:-

if(alertStartTime.equalsIgnoreCase("04/14/17")){
            where.like("alertStartTime", "%" + alertStartTime + "%");
            condCount++;
        }

请帮我解决这个问题。提前谢谢大家!!

【问题讨论】:

    标签: android date sql-delete ormlite


    【解决方案1】:

    在上述数据类中,“alertStartTime”是包含日期的字段,格式为“04/17/17 16:29”。现在当用户选择一周时,“04/10/17 16:29”之前和之后的所有记录都应该从数据库中删除。

    您应该能够执行以下操作:

    DeleteBuilder<AlertsDataClass, Integer> db = dao.deleteBuilder();
    db.where().le("alertStartTime", "2017-04-10 16:29");
    db.delete();
    

    Sqlite 处理 specific timestamp formats 非常好,在您的情况下,它需要采用 "YYYY-MM-DD HH:MM" 格式。这里有更多来自Sqlite's docs about time formats

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2018-06-27
      相关资源
      最近更新 更多