Как можно обрабатывать значения NULL и обычные значения без использования разных подготовленных операторов?

Рассмотрим этот простой метод:

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 и нормальные значения с помощью одного и того же пути кода / оператора?

6
задан dee-see 12 September 2011 в 17:53
поделиться