Em JDBC, por que índices de parâmetros para instruções preparadas começam em 1 em vez de 0?
-
03-07-2019 - |
Pergunta
Em qualquer outro lugar em Java, qualquer coisa com um índice começa em 0. Existe uma razão para a mudança aqui ou é este projeto apenas ruim?
Solução
Historicamente, bancos de dados têm utilizado indexação baseada em 1 para os parâmetros vinculados. Isso provavelmente reflete as origens de bancos de dados relacionais na teoria dos conjuntos e matemática, que elementos de índice começando com um, e use zero para representar um nulo ou vazio set.
No shell scripts e expressões regulares, o índice de zero geralmente significa algo "especial". Por exemplo, no caso de scripts shell, o zeroth "argumento" é na verdade o comando que foi invocado.
A escolha para JDBC foi deliberada, mas, em última análise, provavelmente provoca mais confusão e dificuldade do que resolve.
Outras dicas
Este foi parte de uma conspiração pelos projetistas da linguagem originais para eliminar os mais fracos. Na especificação original, matrizes foram numeradas de -1, e listas com um elemento retornado comprimento = 0.
Hoje, apenas os restos java Calendar API deste trama diabólica.
Pessoalmente eu gostaria chalk a má concepção.
Eu entendo tanto JDBC e ODBC são baseados no X / Open Call Level Interface. Assim, história, do pré-Java, como números de mês 0-based.
provável é que JDBC foi modelado em ODBC.
Mais humano amigável, talvez? Além disso, Java expressões regulares do grupo Matcher começa com 1 como o primeiro grupo combinado.