gpt4 book ai didi

从 mysql 数据库中检索 java.sql.Date 对象时,Java 方法停止,为什么?

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:18 24 4
gpt4 key购买 nike

我的 java 类 (servlet) 一直运行良好,但最近,我发现了一个问题。

在我的数据库中,我有一个名为“Full_Expiration_Date”的日期列。如果输入了一个,它会将其存储为“2010-11-17”。如果未输入一个,则将其存储为“0000-00-00”。

在我的类(class)中,我调用数据库中的记录,并查看“Full_Expiration_Date”字段以查看它是否有日期。如果是,我会执行几行代码来检查是否在今天之前,如果日期不是今天 - 如果满足这两个条件,则优惠券已过期。

因此,当指定了到期日期时,我的代码可以正常工作,但当字段中包含“0000-00-00”时,我的代码就会失败。

我正在为 db 表中的每张优惠券生成一组信息。一旦检查完成并填充数组,它就会作为请求属性发送。

这是我针对此过程的代码片段 -

rs = stmt.executeQuery("select Full_Expiration_Date from coupons");

//will hold value from "Full_Expiration_Date" field in db
java.sql.Date expirationDate = null;

//today's date - used for comparison
java.util.Date today = new java.util.Date();

while(rs.next()) {
//get expiration date from db for this record
expirationDate = rs.getDate(12);

if(expirationDate == null) { //should be if the field is 0000-00-00, right?
//don't do any checking against
//expiration date, this record
//doesn't have one
couponList[counter][11] = "";
} else { //10
if(expirationDate.before(today) & !today.equals(expirationDate)) {
couponList[counter][11] = "expired";
} else { //11
couponList[counter][11] = "";
}//if
}//if
counter++;
}//while

有人可以指出我在这里做错了什么吗?我确定,经过测试,它与字段 0000-00-00 有关。

最佳答案

0000-00-00 是 Java 无法解析的无效日期。您需要在该字段中允许空值,以便 MySQL 停止插入 0,这样您的 if(expirationDate == null) 检查才会真正起作用。

这是 IMO 的愚蠢行为,您应该通过打开严格模式来“修复它”。 http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_no_zero_date

关于从 mysql 数据库中检索 java.sql.Date 对象时,Java 方法停止,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4206261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com