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

StackOverflow https://stackoverflow.com/questions/616135

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

Вероятно, дело в том, что JDBC был смоделирован на ODBC.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top