Рассмотрим этот простой метод:
public ResultSet getByOwnerId(final Connection connection, final Integer id) throws SQLException {
PreparedStatement statement = connection.prepareStatement("SELECT * FROM MyTable WHERE MyColumn = ?");
statement.setObject(1, id);
return statement.executeQuery();
}
Примерный метод должен выбрать все из некоторой таблицы, где соответствует значение столбца, что должно быть простым. Уродливая деталь. заключается в том, что передача NULL для идентификатора приведет к пустому ResultSet, независимо от того, сколько строк в БД, потому что SQL определяет NULL как не равняющий ничего, даже не NULL. of использует другое предложение where:
SELECT * FROM MyTable WHERE MyColumn IS NULL
К сожалению, единственный способ заставить метод работать должным образом во всех случаях, похоже, состоит в том, чтобы иметь два совершенно разных пути выполнения, один для случая, когда аргумент id имеет значение null, а другой для обычных значений .
Это очень некрасиво и когда у вас есть несколько столбцов, которые можно обнулить, это может быстро стать беспорядочным. Как можно обрабатывать значения NULL и нормальные значения с помощью одного и того же пути кода / оператора?