Reputation: 162
CREATE TABLE
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);
}
INSERT TABLE
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;
}
I try it But it not working.
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);
}
How to I can delete all data at HistotyTable older than 30days?
Please. Help me!
Upvotes: 0
Views: 1198
Reputation: 180172
Your timestamp columns contain a number, which is the number of milliseconds since 1970.
The date
function returns a string in the format yyyy-mm-dd
.
Either change your database to store the timestamps in the same format, or change the query to compute the date limit in the millisecond format:
... WHERE CreatedAt <= strftime('%s', 'now', '-30 days') * 1000
Upvotes: 2
Reputation: 1317
Used datediff function
When it comes to SQL, you have to specify what you mean by "older than a day".
DATEDIFF: it uses day boundary midnight so run it at 19th October 00:05 and you'll delete rows 6 minutes old (18th October 23:59)
24 hours?
Yesterday midnight? Run code on 19th October, delete rows before 18th?
Also, don't put a function on a column.
This assumes 24 hours to the minute:
DELETE MyTableWhere WHERE MyColumn < DATEADD(day, -1, GETDATE()) This assumes yesterday midnight:
DELETE MyTableWhere WHERE MyColumn < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), -1)
Upvotes: -1