Лучшая практика для обработки пустых строк из базы данных (на Java) - PullRequest
5 голосов
/ 07 ноября 2008

В моем приложении базы данных мне иногда приходится иметь дело с null строками в базе данных. В большинстве случаев это нормально, но когда дело доходит до отображения данных в форме, компоненты Swing - например, JTextField - не могут обрабатывать пустые строки. (.setText(null) не удается)

( EDIT: Я только что заметил, что JTextField фактически принимает строку null, но вопрос остается для всех других случаев, когда неожиданные значения null могут привести к проблемам.)

Нулевые значения не имеют специального значения, они могут (должны) рассматриваться как пустые строки.

Какая лучшая практика для решения этой проблемы? К сожалению, я не могу изменить базу данных .

  • Проверка каждого значения, если оно null, перед вызовом setText()?
  • Добавление обработчика try-catch для каждого setText() вызова?
  • Представляем статический метод, который фильтрует все строки null?
  • Заменить все значения null на пустые строки сразу после чтения из базы данных?
  • ... [ваши предложения]

Ответы [ 7 ]

6 голосов
/ 07 ноября 2008

Если вы используете какой-либо инструмент ORM или каким-то образом сопоставляете свои поля БД с Java bean-компонентом, вы всегда можете иметь:

public void setFoo(String str) {
  this.foo = str != null ? str : "";
}
4 голосов
/ 07 ноября 2008

Из угла SQL попробуйте:

select ISNULL(column_name,'') from ...
2 голосов
/ 08 ноября 2008

Я думаю, что все ваши ответы являются разумными, но так как вы пометили эту «передовую практику», я хотел бы напомнить вам о шаблоне проектирования пустых объектов. Везде, где это кажется стоящим усилий, для любого класса, нуждающегося в защите, пишите специальный код реализации для «нулевого» объекта этого класса. Идея в том, что этот «нулевой» объект является реальным и может вести себя надлежащим образом независимо от того, что вы просите его сделать. Ваш нулевой объект «String» может предоставить все, что вы хотите, поскольку это значение.

Этот шаблон также означает, что вы можете избавиться от множества пустых проверок, и код становится более надежным. Он использует немного ресурсов ЦП, отправляя сообщения на нули и заставляя их ничего не делать, поэтому менее желательно, когда ожидается, что большой процент объектов будет нулевым.

2 голосов
/ 07 ноября 2008

Используйте Beans Binding API для привязки значений объектов вашей сущности к вашим SWING-виджетам. Привязка Beanins будет прозрачно обрабатывать нулевые значения и не заменяет пустые строки пустой строкой.

0 голосов
/ 07 ноября 2008

Как сказал Рубен, я бы расширил JTextField, чтобы перезаписать метод setText (), и заменил бы NULL пустой строкой.

Однако я бы также перезаписал метод getText (), чтобы перезаписать пустую строку с помощью NULL, чтобы при повторном сохранении в базу данных вы не перезаписывали там пустое значение пустой строкой.

0 голосов
/ 07 ноября 2008

Вы можете расширить или обернуть JTextField и переписать метод setText (), чтобы заменить NULL пустой строкой.

0 голосов
/ 07 ноября 2008

Если можете, добавьте значение по умолчанию - пустую строку - для поля в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...