有一个非常新手的问题。应该在何处处理空值,以使它们对最终用户不可见。假设您有一些属性,并且这些属性具有OPENDATE。数据库中OPENDATE的某些值当前可能为null。从应用程序的角度来看,我会将此特定实例中的空字符串呈现给最终用户。你会用查询来处理这个问题,还是在应用程序端让你说你有一个java web应用程序?
分贝:
SELECT NVL(TO_CHAR(OPENDATE), ' ') from table
或
的java:
if(str.equalsIgnoreCase("null")
//render empty string
答案 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
str = rs.getString("column")
if(rs.wasNull()) {
str = "";
}
答案 3 :(得分:0)
我同意grice提供的答案,但我会更进一步说,在您的域模型中,您应该明确说明此字段可能不存在。像任何地方一样使用null可能会导致其他问题,因此请将您的字段设为可选。在Java 8中,您可以使用内置功能,在此之前您可以使用Guava's Optional