按时间戳< sqlite删除行x天

时间:2016-08-21 22:16:52

标签: sqlite datetime delete-row

我的表格如下:

import java.util.Random;

public class CardDeck {

    public static void main(String[] args) {

        System.out.println("Here is your random card.");

        int array[] = new int[13];  

        array[0] = 2;
        array[1] = 3;
        array[2] = 4;
        array[3] = 5;
        array[4] = 6;
        array[5] = 7;
        array[6] = 8;
        array[7] = 9;
        array[8] = 10;
        array[9] = 11;
        array[10] = 12;
        array[11] = 13;
        array[12] = 14;

    }

    public int getRandom(int[] array) {
        int cardNumber = new Random().nextInt(array.length);
        return array[cardNumber];
    }

}

我使用此查询添加记录:

 tx.executeSql(
    "CREATE TABLE IF NOT EXISTS mytable (
      msg_id UNSIGNED INT PRIMARY KEY ASC, 
      msg_when DATETIME, 
      msg_read INTEGER, 
      title TEXT, msg_text TEXT
     )",

我想要删除超过' x'天和我使用此查询但没有任何内容被删除,成功回调被调用,没有行影响。

 tx.executeSql(
   "INSERT OR REPLACE INTO mytable
    (msg_id, msg_when, msg_read, title, msg_text)
    VALUES 
    (?,?,?,?,?)",

我也尝试过:

 tx.executeSql(
   "DELETE FROM mytable 
    WHERE msg_when <= datetime('now', '-? days')", [days],

var strQuery = "DELETE FROM mytable 
   WHERE msg_when <= datetime('now', '-" +days +" days')";
tx.executeSql(strQuery, 

数据如下:

var strQuery = "DELETE FROM mytable 
  WHERE msg_when <= datetime('now', '-4 days')";
tx.executeSql(strQuery, 

除了按日期删除行外,一切都运行得很好。关于我可以做些什么来修复删除的任何建议?

3 个答案:

答案 0 :(得分:2)

DELETE语句的问题是参数模板(?)在字符串文字中,因此被忽略。您需要使用连接运算符(||):

DELETE FROM mytable WHERE msg_when <= datetime('now', '-' || ? || ' days')

答案 1 :(得分:0)

好的,实际上有两个技巧来解决这个问题。

首先,如果你将你的字段声明为日期时间(这不过是一个整数),你将永远不会这样做。不在iOS 9.x下,不在Android下,在Windows 10上不在Chrome 52.0.2743.116 m(64位)上。

您需要做的是将日期存储为TEXT字段,并将日期时间存储为如下字符串:

 tx.executeSql("CREATE TABLE IF NOT EXISTS mytable (msg_id UNSIGNED INT PRIMARY KEY ASC, msg_when TEXT, msg_read INTEGER, title TEXT, msg_text TEXT)",

接下来,您必须将您的比较包装在(括号)中,以便sqlite将其视为公式并为您进行数学转换......就像这样:

tx.executeSql(DELETE FROM mytable WHERE (msg_when <= datetime('now', '-4 days'))", 

注意(msg_when列之前和日期时间的右括号之后)括号之前的括号。)

答案 2 :(得分:0)

从AIS的timpstamp中删除

这应该可以,如果没有,请检查保存时间戳的表, 检查时间字符串的格式,应为YYYY-MM-DD HH:MM:SS,如果您的forfamt不匹配,则该命令将无效。

使用SQLite而不是系统命令来保存时间戳。