【问题标题】:deleting android SQLite rows older than x days删除超过 x 天的 android SQLite 行
【发布时间】:2012-08-02 05:34:19
【问题描述】:

我想删除表 MYTABLE 中早于 x 天的所有行。 Column SAVE_DATE Long 是该行在表中插入的时间。

我试过了,但显然它删除了我所有的行:

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

怎么了?

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    以下查询将删除超过 2 天的数据:

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

    【讨论】:

      【解决方案2】:

      由于它是谷歌上的第一个热门,所以对初学者的更多解释:
      您不需要用于访问 sqlite DB 的主程序中的时间/日期函数,而是直接使用 sqlite 日期函数。

      您使用年龄的行条目创建表,例如:

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

      你写给它

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

      这里我使用了“日期时间”,因为这也可以让您稍后搜索小时/分钟/秒。如果你不需要'date('now')'就足够了。

      这里是对日期函数的解释:https://www.sqlite.org/lang_datefunc.html

      要选择所有早于例如 5 分钟的内容:

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

      您可以在上面的网站上的“修饰符”段落下看到更多这些可能性。

      【讨论】:

        【解决方案3】:

        当时间戳或日期字段以毫秒或纪元整数存储时,删除超过 2 天的数据。

        DELETE FROM update_log WHERE timestamp <= strftime('%s', datetime('now', '-2 day'));
        

        【讨论】:

          【解决方案4】:

          使用最新版本的 ORMLite for SQLite Android:http://ormlite.com/sqlite_java_android_orm.shtml,您可以使用以下代码实现此目的:

                                  String sql = "DELETE FROM graph WHERE time <= 1522405117";
                                  dbHelper.getWritableDatabase().execSQL(sql);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-04-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-02
            • 1970-01-01
            • 2012-05-06
            相关资源
            最近更新 更多