2012-08-02 30 views
12

Tôi muốn xóa tất cả các hàng trong bảng MYTABLE cũ hơn x ngày. Cột SAVE_DATE Long là thời điểm hàng được chèn vào bảng.xóa các hàng sqllite android cũ hơn x ngày

tôi đã cố gắng này, nhưng dường như nó xóa tất cả các hàng của tôi:

long daysInMiliSec = new Date().getTime() - X 
      * (24L * 60L * 60L * 1000L); 
return db.delete(MYTABLE , SAVE_DATE 
      " <= ?", new String[] { "" + daysInMiliSec } 

Điều gì là sai?

Cảm ơn bạn đã giúp tôi.

Trả lời

26

Dưới truy vấn sẽ xóa dữ liệu cũ hơn 2 ngày:

String sql = "DELETE FROM myTable WHERE Save_Date <= date('now','-2 day')"; 
db.execSQL(sql); 
10

Kể từ đó là hit đầu tiên trên google một số giải thích nhiều hơn cho người mới bắt đầu:
Bạn không cần các chức năng thời gian/ngày từ chương trình chính bạn sử dụng để truy cập vào sqlite DB nhưng sử dụng các hàm ngày tháng sqlite trực tiếp.

Bạn tạo bảng với sự xâm nhập hàng cho tuổi với ví dụ:

CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY, text TEXT, age INTEGER) 

Bạn viết thư cho nó với

INSERT INTO test (text, age) VALUES ("bla", datetime('now')) 

Ở đây tôi sử dụng 'datetime' vì điều này cũng sẽ cho phép bạn sau đó tìm kiếm giờ/phút/giây. Nếu bạn không cần 'ngày (' bây giờ ')' là đủ.

Dưới đây là một lời giải thích cho chức năng ngày: https://www.sqlite.org/lang_datefunc.html

Để chọn tất cả mọi thứ lớn hơn ví dụ 5 phút:

SELECT * FROM test WHERE age <= datetime('now', '-5 minutes') 

Bạn có thể xem chi tiết của những khả năng trên trang web trên dưới đoạn ' Công cụ sửa đổi '.

Các vấn đề liên quan