处理数据库或应用程序的空值?

时间:2014-12-18 15:14:16

标签: java database model-view-controller

有一个非常新手的问题。应该在何处处理空值,以使它们对最终用户不可见。假设您有一些属性,并且这些属性具有OPENDATE。数据库中OPENDATE的某些值当前可能为null。从应用程序的角度来看,我会将此特定实例中的空字符串呈现给最终用户。你会用查询来处理这个问题,还是在应用程序端让你说你有一个java web应用程序?

分贝:

SELECT NVL(TO_CHAR(OPENDATE), ' ') from table

的java:

if(str.equalsIgnoreCase("null")
//render empty string

4 个答案:

答案 0 :(得分:2)

您应该在View层*(例如JSP)

中处理它

如果要表示“尚未设置值”,您的业务逻辑(域对象)应包含NULL值。

向用户显示空字符串特定于显示设备和上下文。

* View Layer 也可能意味着您在View控制器逻辑中准备将用于在JSP上显示数据的支持bean。

重要的是,您可以在需要时区分NULL值(未设置值)和空字符串(已设置值,但它是空字符串)之间的区别。例如,如果用户未设置值,您可能希望切换某些数据元素的HTML显示。

要专门解决您的问题,Date字段在您的Domain Model中显示空白String的值可能没有意义。一个好的经验法则是在程序流程中尽可能长时间地保持数据Typed正确(即Value objects)。

答案 1 :(得分:1)

通常,对应用程序的可视外观的任何更改都是在应用程序端(您的Java代码)处理的。这种方式更简洁,并提供了一种更简单的代码调试方法。这样,当你的程序开始看起来很奇怪的时候,你会知道外观的唯一变化都在一个地方,你不必乱用你的SQL查询。

答案 2 :(得分:1)

你可以在任何地方做到这一点。我会在你的java代码中说。

if (str == null) {
   str = "";
}

您还可以使用ResultSet

提供的wasNull()
str = rs.getString("column")
if(rs.wasNull()) {
  str = "";
}

答案 3 :(得分:0)

我同意grice提供的答案,但我会更进一步说,在您的域模型中,您应该明确说明此字段可能不存在。像任何地方一样使用null可能会导致其他问题,因此请将您的字段设为可选。在Java 8中,您可以使用内置功能,在此之前您可以使用Guava's Optional