删除记录超过7天MySQLite android

时间:2015-09-04 10:57:12

标签: android mysql android-sqlite

我一直试图在MySQLite android中删除超过7天的记录而没有成功。我试过了:

database.execSQL("delete from " + MySQLite.WORKFLOW_TABLE_NAME + " where '" + MySQLite.WORKFLOW_COLUMN_DATECREATED +
    "' < 'DATE_SUB(NOW(), INTERVAL 7 DAY)'");

database.delete(MySQLite.WORKFLOW_TABLE_NAME, "date('now') > date('" + MySQLite.WORKFLOW_COLUMN_DATECREATED + "', '+7 days')",
  null);

database.delete(MySQLite.WORKFLOW_TABLE_NAME, MySQLite.WORKFLOW_COLUMN_DATECREATED + " < '"
    + dateFormat.format(range.getTime()) + "'", null);

并且没有这些正在发挥作用。我使用以下方法将日期保存到表中:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
ContentValues values = new ContentValues();
values.put(MySQLite.WORKFLOW_COLUMN_DATECREATED, dateFormat.format(convertStringToDate(Data.State.tripdate)));

表的日期列创建为:     WORKFLOW_COLUMN_DATECREATED +&#34;文字不为空,&#34;

并将字符串转换为日期:

public Date convertStringToDate(String dateString)
{
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
Date date = null;
try {

  date = formatter.parse(dateString);
  System.out.println(date);
  System.out.println(formatter.format(date));

} catch (ParseException e) {
  e.printStackTrace();
}
return date;

}

有人帮助。

1 个答案:

答案 0 :(得分:0)

Android使用SQLite,而不是MySQL。您可能需要熟悉一组不同的date and time functions

我的偏好是始终将日期和时间存储为长值(自纪元以来的毫秒数),因为这对于任何类型的比较都更方便,并且使用格式化的日期字符串进行转换很容易Java类,如CalendarDateFormat

如果不这样做,我建议你以yyyy-MM-dd的形式存储日期,因为这是SQLite在上面链接中的各种日期和时间函数中接受的 timestring 格式之一。然后,您可以使用STRFTIME('%s')轻松将日期转换为可比较的值(自纪元以来的秒数)。基本上这个陈述看起来像这样:

DELETE FROM table WHERE STRFTIME('%s', column) < STRFTIME('%s', 'now', '-7 days');

如果失败了,您可以使用一些字符串操作函数将当前日期转换为可以作为参数传递给STRFTIME的内容。假设您的所有值均为yyyy/MM/dd,则可以使用REPLACE函数将其转换为yyyy-MM-dd。在上面的陈述中,它看起来像这样:

DELETE FROM table WHERE STRFTIME('%s', REPLACE(column, '/', '-')) < STRFTIME('%s', 'now', '-7 days');

以下是我在Java中的表现:

String selection = "STRFTIME('%s', REPLACE(" + MySQLite.WORKFLOW_COLUMN_DATECREATED
        + ", '/', '-')) < STRFTIME('%s', 'now', '-7 days')";
int numDeleted = database.delete(MySQLite.WORKFLOW_TABLE_NAME, selection, null);