Почему в JDBC индексы параметров для подготовленных операторов начинаются с 1, а не с 0?
-
03-07-2019 - |
Вопрос
Везде в Java все, что имеет индекс, начинается с 0. Есть ли причина для изменения здесь или это просто плохой дизайн?
Решение
Исторически базы данных использовали индексирование на основе 1 для связанных параметров. Это, вероятно, отражает происхождение реляционных баз данных в теории множеств и математике, в которых элементы индекса начинаются с единицы и используют ноль для представления нулевого или пустого множества.
В сценариях оболочки и регулярных выражениях нулевой индекс обычно означает что-то «специальное». Например, в случае сценариев оболочки нулевой аргумент " на самом деле команда, которая была вызвана.
Выбор JDBC был осознанным, но, в конечном счете, вероятно, вызывает больше путаницы и трудностей, чем решает.
Другие советы
Это было частью заговора дизайнеров оригинального языка, чтобы отсеять слабых. В исходной спецификации массивы были пронумерованы от -1, а списки с 1 элементом возвращали длину = 0. Р>
Сегодня из этого дьявольского сюжета остается только API-интерфейс Java Calendar.
Лично я бы отнес это к плохому дизайну.
Я понимаю, что JDBC и ODBC основаны на интерфейсе уровня вызовов X / Open. Таким образом, это история до Java, например, цифры месяца на основе 0.
Вероятно, дело в том, что JDBC был смоделирован на ODBC.
Может быть, более дружелюбный человек? Кроме того, группа соответствия регулярных выражений Java начинается с 1 в качестве первой соответствующей группы.