我的表格如下:
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,
除了按日期删除行外,一切都运行得很好。关于我可以做些什么来修复删除的任何建议?
答案 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而不是系统命令来保存时间戳。