我有这段代码
while(activecheck.next()){
Date status;
String vincheck;
Date curr = new Date();
int datecheck;
status = activecheck.getDate(8);
vincheck = activecheck.getString(2);
String update = "UPDATE Auctions SET status = '"+inactive+"' WHERE vin = '"+vincheck+"'";
datecheck = status.compareTo(curr);
if(datecheck < 0){
stmt6.executeUpdate(update);
}
}
它遍历mysql表检查非活动出价。我试图检查sql行中列出的日期和时间是否已被当前时间传递。然而,每当我这样做,似乎只是比较日期,而不是时间。这可能是什么原因?
这是我使用的格式:yyyy-mm-dd hh:mm:ss`
2条答案
按热度按时间00jrzges1#
应该使用名为timestamp的类型,而不是日期。这样,您将涵盖日期和当前时间
rggaifut2#
热释光;博士
java.util.date与java.sql.date
您可能会混淆这对不幸命名错误的类。第一个是日期和时间类型,以utc为单位。第二种是仅日期类型。实际上,第二个假装是一个日期类型,但实际上有一天的时间设置为00:00:00。更糟糕的是,第二个继承自第一个,但是文档指示我们忽略这个事实。
困惑?对。这些糟糕的课程设计得很糟糕。避开他们。
java.time文件
您正在使用非常麻烦的旧日期时间类,这些类在几年前被java.time类所取代。
瞬间
这个
java.util.Date
类替换为java.time.Instant
. 这个Instant
类表示时间线上的一个时刻(utc),分辨率为纳秒(最多九(9)位小数)。本地日期
这个
java.sql.Date
类替换为java.time.LocalDate
. 这个LocalDate
类表示一个仅限日期的值,不包含一天中的时间和时区。jdbc 4.2版
从JDBC4.2及更高版本开始,您可以直接与数据库交换java.time类。无需再次使用java.sql或java.util日期时间类型。
小贴士:养成一个习惯,总是使用
PreparedStatement
避免sql注入风险。一旦你习惯了就不会再工作了。和检索。
聪明的东西,而不是愚蠢的字符串
这是我使用的格式:yyyy-mm-dd hh:mm:ss`
存储在数据库中的日期时间值没有“格式”。这些值由一些内部定义的机制存储,这些机制与我们无关。它们不是字符串(也就是说,在任何严肃的数据库中都不是)。
您的数据库和java日期时间对象可以解析表示日期时间值的字符串来创建该值。它们可以生成一个字符串来表示这个值。但是字符串和日期时间值是不同的、独立的,不应混为一谈。
使用java.time对象与您的数据库交换日期时间值,而不仅仅是字符串,就像您对数据库所理解的数字和其他数据类型所做的那样。仅将字符串用于传递文本值。
比较
要将检索到的值与当前时刻进行比较,请使用
isBefore
,isAfter
,和equals
方法Instant
班级。关于java.time
java.time框架内置于Java8及更高版本中。这些类取代了旧的遗留日期时间类,例如
java.util.Date
,Calendar
, &SimpleDateFormat
.现在处于维护模式的joda time项目建议迁移到java.time类。
要了解更多信息,请参阅oracle教程。和搜索堆栈溢出的许多例子和解释。规格为jsr 310。
您可以直接与数据库交换java.time对象。使用符合jdbc 4.2或更高版本的jdbc驱动程序。不需要线,不需要线
java.sql.*
班级。从哪里获得java.time类?
java se 8、java se 9、java se 10及更高版本
内置的。
标准javaapi的一部分,带有一个捆绑的实现。
Java9添加了一些次要的特性和修复。
java se 6和java se 7
大部分java.time功能都是通过310个后端口后端口移植到Java6和Java7的。
安卓
android包java.time类的更高版本实现。
对于早期的android(<26),threetenabp项目采用了threeten backport(如上所述)。了解如何使用threetenabp…。
threeten额外的项目用额外的类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如
Interval
,YearWeek
,YearQuarter
,等等。