Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java sqlite查询当前时间和时间戳_Java_Sql_Database_Sqlite - Fatal编程技术网

Java sqlite查询当前时间和时间戳

Java sqlite查询当前时间和时间戳,java,sql,database,sqlite,Java,Sql,Database,Sqlite,我的sqlite3数据库中有一个表,其中包含以下字段: id text not null, phonenum text not null, timeofcall text not null 时间戳基本上是插入的时间(在我的应用程序中,当有人打电话时,它会插入电话号码和通话时间。) 我希望在最后一分钟内获得特定数字的所有行,例如: SELECT * FROM callstbl WHERE phonenum = '07857463756' AND timeofcall < 1 minute

我的sqlite3数据库中有一个表,其中包含以下字段:

id text not null, phonenum text not null, timeofcall text not null
时间戳基本上是插入的时间(在我的应用程序中,当有人打电话时,它会插入电话号码和通话时间。)

我希望在最后一分钟内获得特定数字的所有行,例如:

SELECT * FROM callstbl WHERE phonenum = '07857463756' AND timeofcall < 1 minute ago;
我的日期时间字符串(timeofcall)的格式为yyyy MM dd HH:MM:ss

如果我这么做的话

SELECT * FROM callstbl WHERE timeofcall >= datetime('now', '-1 minutes');

我将返回数据库中的每一行。

假设
timeofcall
处于启用状态,请使用:


假设
timeofcall
处于启用状态,请使用:


我建议最好在您的表中有一列显示,timeOfCallMili,以毫秒为单位存储时间。这样,您就更容易根据日期/时间进行查询。 您的查询将类似于

WHERE timeOfCallMili >= System.currentTimeMillis() - 60000 
或者说,如果希望在7天内(或任何特定日期)获取记录,则可以使用日历对象来表示该日期/时间

Calendar queryTime = Calendar.getInstance(); //this instance gets the current date/time as default values
    queryTime.set(Calendar.DATE, queryTime.get(Calendar.DATE) - 7); //setting date to 7 days back
    queryTime.set(Calendar.HOUR, 0);    //setting time to 0, as its set to current time by default. 
    queryTime.set(Calendar.MINUTE, 0);
因此,现在您的查询变为

     WHERE timeOfCallMili >= queryTime.getTimeInMillis();

通过这种方式,您可以在任何类型的基于时间的查询上获得充分的灵活性。

我建议最好在表中设置一列,例如,timeOfCallMili,该列以毫秒为单位存储时间。这样,您就更容易根据日期/时间进行查询。 您的查询将类似于

WHERE timeOfCallMili >= System.currentTimeMillis() - 60000 
或者说,如果希望在7天内(或任何特定日期)获取记录,则可以使用日历对象来表示该日期/时间

Calendar queryTime = Calendar.getInstance(); //this instance gets the current date/time as default values
    queryTime.set(Calendar.DATE, queryTime.get(Calendar.DATE) - 7); //setting date to 7 days back
    queryTime.set(Calendar.HOUR, 0);    //setting time to 0, as its set to current time by default. 
    queryTime.set(Calendar.MINUTE, 0);
因此,现在您的查询变为

     WHERE timeOfCallMili >= queryTime.getTimeInMillis();

通过这种方式,您可以在任何类型的基于时间的查询上获得充分的灵活性。

为什么
timeofcall
存储为
text
?从我看到的sqlite是“松散类型”的,为什么
timeofcall
存储为
text
?从我看到的sqlite在我的java中是“松散类型”的,我有以下内容:字符串sql=“从callstbl中选择*,其中timeofcall>=datetime('now','-1分钟'),phonenum='”+num+“'";当我使用该查询时,它会返回phonenum匹配的每一行,就好像它将“AND”视为是“或”感谢您的帮助,我将另一行标记为正确,因为他也为我提供了更多特定于平台的信息,+1在我的java中,我有以下内容:String sql=“select*FROM callstbl where timeofcall>=datetime('now','-1分钟'))phonenum=“+num+”;当我使用该查询时,它会返回phonenum匹配的每一行,就好像它将'AND'视为'OR'感谢您的帮助,我将另一行标记为正确,因为他也为我提供了更多特定于平台的信息,+1