从数据库处理空字符串的最佳实践(Java)

时间:2008-11-07 12:13:48

标签: java database swing

在我的数据库应用程序中,我有时必须处理数据库中的null字符串。在大多数情况下这很好,但是当它以一种形式显示数据时,Swing组件 - 例如使用JTextField - 无法处理空字符串。 (.setText(null)失败)

编辑:我刚注意到JTextField实际上接受了null字符串,但问题仍然存在于意外的null值可导致的所有其他情况问题。)

空值没有特殊含义,它们可以(必须)被视为空字符串。

处理此问题的最佳做法是什么? 不幸的是我无法更改数据库

  • 在致电null之前检查每个值是否为setText()
  • 为每个setText()电话添加try-catch处理程序?
  • 介绍一种过滤所有null字符串的静态方法?
  • 从数据库中读取后立即将所有null值替换为空字符串?
  • ... [您的建议]

7 个答案:

答案 0 :(得分:6)

如果您正在使用任何ORM工具或以某种方式将数据库字段映射到Java bean,您可以总是:

public void setFoo(String str) {
  this.foo = str != null ? str : "";
}

答案 1 :(得分:4)

从SQL角度尝试:

select ISNULL(column_name,'') from ...

答案 2 :(得分:2)

使用Beans Binding API将实体对象中的值绑定到SWING Widgets。 Beanins Binding将透明地处理空值,并且不会用空字符串替换null。

答案 3 :(得分:2)

我认为你的所有答案都是合理的,但是既然你标记了这个“最佳实践”,我想提醒你的是空对象设计模式。无论哪个类似乎值得努力,无论什么类需要保护,都要为该类的“null”对象编写特殊的实例化代码。这个想法是这个“空”对象是真实的,无论你要求它做什么,它都可以表现得恰到好处。您的null“String”对象可以提供您想要的任何值。

此模式还意味着您可以摆脱大量的空检查,并且代码更加健壮。它确实耗尽了一些CPU将消息发送到空值并让它们什么也不做,所以当大部分对象预期为空时,它就不太可取了。

答案 4 :(得分:0)

如果可以,请为DB中的字段添加默认值 - 空字符串。

答案 5 :(得分:0)

您可以扩展或包装JTextField并覆盖setText()方法以使用空String替换NULL。

答案 6 :(得分:0)

正如Ruben所说,我会扩展JTextField来覆盖setText()方法并用空字符串替换NULL。

但是我也会覆盖getText()方法以用NULL覆盖空字符串,这样当你保存回数据库时,你不会用空字符串覆盖那里的空值。