2016-03-15 48 views
0

CREATE TABLE如何刪除所有數據HistoryTable時間比30天年長SQLite中的Android

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; 
} 

我嘗試但它n不工作。

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天以上的所有數據?
請。幫我!

回答

-1

使用DATEDIFF函數

當涉及到SQL,你必須指定你所說的「比天老」的意思。

DATEDIFF:它使用天界午夜因此在10月19日00:05運行它,你會刪除行6分鐘老(10月18日23:59)

24小時?

昨天午夜?在10月19日運行代碼,在18日之前刪除行?

另外,不要在列上放置函數。

這是假定24小時分:

DELETE MyTableWhere WHERE MyColumn < DATEADD(天,-1,GETDATE()) 這是假設昨天午夜:

DELETE MyTableWhere WHERE (DAY,DATEDIFF(DAY,0,GETDATE()),-1)

+0

在我的例子。我該怎麼辦 ?謝謝 –

+0

這在SQLite中不起作用。 –

0

您的時間戳c列中包含一個數字,它是1970年以來的毫秒數。 date函數返回格式爲yyyy-mm-dd的字符串。

要麼改變你的數據庫的時間戳存儲在相同的格式,或更改查詢計算在毫秒格式的日期限制:

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