2017-04-17 87 views
0

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

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

以下是我的目标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”是包含在“17年4月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++; 
     } 

请帮我弄清楚这个问题。谢谢先进的家伙!

回答

0

在上述数据类中,“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

相关问题