【问题标题】:How to check Null value for Date Object如何检查日期对象的空值
【发布时间】:2011-11-15 20:39:57
【问题描述】:

我正在使用 JSF 2.0 和 RichFaces 3.3。在我的视图中,用户将从日历中选择一个日期。使用的标签是<rich:calendar>。这在带有Date 对象的支持bean 中映射。然而,这个字段是可选的,因此当用户没有选择一个日期时,这个特定条目的支持 bean getter 返回null,这是正确的。

我的问题是我必须将此日期存储在数据库中。因此,在存储之前,我以这种方式进行类型转换:

if (newProfile.get(Constants.DETAILS_EXPIRY_DATE_1).equals(null)) {
    this.cStmt.setDate(15,null);
} else {
    java.sql.Date sqlDate = new java.sql.Date(((java.util.Date)newProfile.get(Constants.DETAILS_EXPIRY_DATE_1)).getTime());
    this.cStmt.setDate(15,sqlDate);
}

但是它在if 条件中抛出了NullPointerException。当用户没有选择日期时,我想在 DB 中插入 null 值。我该怎么做?

【问题讨论】:

  • 发布堆栈跟踪。从外观上看,如果它只能来自“newProfile”,则表示它没有被初始化,与做无关。
  • @Shahzeb,也可能是newProfile.get(Constants.DETAILS_EXPIRY_DATE_1) 返回了null
  • 真@The。 Ankit post stacktrace 还显示了更多代码。
  • 是的...那行返回 null 但这就是为什么我要检查 null 值...我知道什么时候不会选择一个日期它会有 null 值..因为它包含空值我将存储空值而不进行类型转换..但是如果条件本身抛出空指针异常。

标签: java date jsf-2 richfaces nullpointerexception


【解决方案1】:

如果您想在避免 NullPointerException 方面更加稳健

if (newProfile != null) {
    Object obj = newProfile.get(Constants.DETAILS_EXPIRY_DATE_1);
    if (obj == null) {
        this.cStmt.setDate(15, null);
    } else {
        java.sql.Date sqlDate = new java.sql.Date(((java.util.Date)obj).getTime());
                this.cStmt.setDate(15,sqlDate);

    }
}

【讨论】:

    【解决方案2】:

    试试if(newProfile.get(Constants.DETAILS_EXPIRY_DATE_1) == null)

    对于字符串,可以使用 equals() 方法。此外,对象在使用 equals 方法之前需要检查 null 以避免 NullPointerException。

    【讨论】:

    • 不仅这个答案不正确,而且还得到了一个赞成票——虚幻。
    • @Vanathi 我的问题似乎已经解决了......我认为与字符串一起,Date 对象也可以使用 .equals 方法检查为空,这就是它最初失败的原因......跨度>
    • @Vanathi,你的答案是正确的,但你的解释是错误的。
    • 它对我有用。请专家解释一下为什么会这样?
    猜你喜欢
    • 2010-10-13
    • 1970-01-01
    • 2022-08-17
    • 2018-12-21
    • 2017-03-01
    • 2012-09-22
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多