【问题标题】:How to delete all data HistoryTable have time older than 30days in SQLite Android如何在 SQLite Android 中删除所有数据历史表的时间超过 30 天
【发布时间】:2016-03-15 02:51:59
【问题描述】:

创建表

public static void createTable(SQLiteDatabase db){  
String sql = "CREATE TABLE " + TABLE_HISTORY + " ("  
                    + COL_ID + " INTEGER PRIMARY KEY NOT NULL, "  
                    + COL_TITLE + " TEXT, "  
                    + COL_MEDIA_NAME + " TEXT, "  
                    + COL_IMAGE_URL + " TEXT, "  
                    + COL_URL + " TEXT, "  
                    + COL_CREATED_AT + " INTEGER NOT NULL DEFAULT 0, "  
                    + COL_UPDATED_AT + " INTEGER NOT NULL DEFAULT 0 "  
                    + ")";  
    db.execSQL(sql);  
}

插入表格

 public static long insertTableHistory(DatabaseDAO db, int mId, String title, String mediaName, String imageUrl, String url) {
    SQLiteDatabase database = db.getWritableDatabase();
    String sql =
            "INSERT INTO " + TABLE_HISTORY + " ("
                    + COL_ID + ", "
                    + COL_TITLE + ", "
                    + COL_MEDIA_NAME + ", "
                    + COL_IMAGE_URL + ", "
                    + COL_URL + ", "
                    + COL_CREATED_AT + ","
                    + COL_UPDATED_AT +
                    ")"
                    + " VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
SQLiteStatement statement = database.compileStatement(sql);
    long id = -1;
    try {
        database.beginTransaction();
        statement.clearBindings();
        statement.bindLong(1, mId);
        statement.bindString(2, title);
        statement.bindString(3, mediaName);
        statement.bindString(4, imageUrl);
        statement.bindString(5, url);
        statement.bindLong(6, System.currentTimeMillis());
        statement.bindLong(7, System.currentTimeMillis());
        id = statement.executeInsert();
        database.setTransactionSuccessful();

    } catch (Exception e) {
        database.endTransaction();
    } finally {
        database.endTransaction();
    }
    return id;
}

我试了一下但是没用。

public static void deleteDataOlderThan30Days(DatabaseDAO databaseDAO) {

    String sql = "DELETE FROM " + TABLE_HISTORY + " WHERE " + COL_CREATED_AT + "<= date('now','-30 day')";
    SQLiteDatabase database = databaseDAO.getWritableDatabase();
    database.execSQL(sql);
}

如何删除 HistotyTable 中超过 30 天的所有数据?
请。帮帮我!

【问题讨论】:

    标签: android sqlite sql-delete


    【解决方案1】:

    您的时间戳列包含一个数字,即自 1970 年以来的毫秒数。 date 函数返回格式为yyyy-mm-dd 的字符串。

    要么更改您的数据库以以相同格式存储时间戳,要么更改查询以以毫秒格式计算日期限制:

    ... WHERE CreatedAt <= strftime('%s', 'now', '-30 days') * 1000
    

    【讨论】:

      【解决方案2】:

      使用 datediff 函数

      对于 SQL,您必须指定“超过一天”的含义。

      DATEDIFF:它使用日期边界午夜,因此在 10 月 19 日 00:05 运行它,您将删除 6 分钟前的行(10 月 18 日 23:59)

      24 小时?

      昨天午夜? 10 月 19 日运行代码,删除 18 日之前的行?

      另外,不要将函数放在列上。

      假设 24 小时到分钟:

      删除 MyTableWhere 在哪里 MyColumn

      删除 MyTableWhere 在哪里 MyColumn

      【讨论】:

      • 在我的示例中。我应该怎么办 ?谢谢
      猜你喜欢
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多