Почему в JDBC индексы параметров для подготовленных операторов начинаются с 1, а не с 0? - PullRequest
31 голосов
/ 05 марта 2009

Везде в Java все, что имеет индекс, начинается с 0. Есть ли причина для изменения здесь или это просто плохой дизайн?

Ответы [ 6 ]

38 голосов
/ 05 марта 2009

Исторически базы данных использовали индексирование на основе 1 для связанных параметров. Это, вероятно, отражает происхождение реляционных баз данных в теории множеств и математике, где элементы индекса нумеруются с единицы и используют ноль для представления нулевого или пустого множества.

В сценариях оболочки и регулярных выражениях нулевой индекс обычно означает что-то «особенное». Например, в случае сценариев оболочки нулевой «аргумент» фактически является командой, которая была вызвана.

Выбор JDBC был осознанным, но, в конечном счете, вероятно, вызывает больше путаницы и трудностей, чем решает.

17 голосов
/ 05 марта 2009

Это было частью заговора дизайнеров оригинального языка, чтобы отсеять слабых. В исходной спецификации массивы были пронумерованы от -1, а списки с 1 элементом возвращали длину = 0.

Сегодня от этого дьявольского сюжета остается только API-интерфейс Java Calendar.

2 голосов
/ 05 марта 2009

Я понимаю, что JDBC и ODBC основаны на интерфейсе уровня вызова X / Open. Таким образом, это история до Java, например, числа месяцев на основе 0.

2 голосов
/ 05 марта 2009

Лично я бы отнес это к плохому замыслу.

0 голосов
/ 05 марта 2009

Может быть, более дружелюбный человек? Кроме того, регулярное выражение Java в группе Matcher начинается с 1 в качестве первой соответствующей группы.

0 голосов
/ 05 марта 2009

Скорее всего, JDBC был смоделирован на ODBC.

...