在JDBC中,为什么预处理语句的参数索引从1开始而不是0?

时间:2009-03-05 18:58:50

标签: java jdbc indexing prepared-statement

Java中的其他任何地方,索引的任何内容都从0开始。这里有变化的原因还是这个设计不好?

6 个答案:

答案 0 :(得分:38)

历史上,数据库对绑定参数使用了基于1的索引。这可能反映了集合论和数学中关系数据库的起源,它们以1开头索引元素,并使用零来表示空集或空集。

在shell脚本和正则表达式中,零索引通常意味着“特殊”。例如,在shell脚本的情况下,第0个“参数”实际上是被调用的命令。

JDBC的选择是故意的,但最终可能会导致比它解决的更多混乱和困难。

答案 1 :(得分:17)

这是原始语言设计师清除弱者的情节的一部分。在原始规范中,数组从-1开始编号,而包含1个元素的列表返回长度= 0。

今天,只有java Calendar API仍然来自这个恶魔般的情节。

答案 2 :(得分:2)

就个人而言,我会将其归结为糟糕的设计。

答案 3 :(得分:2)

我知道JDBC和ODBC都基于X / Open Call Level Interface。因此,它是Java之前的历史记录,就像基于0的月份数字一样。

答案 4 :(得分:0)

可能是JDBC在ODBC上建模。

答案 5 :(得分:0)

可能更人性化?此外,Java正则表达式Matcher组以1作为第一个匹配组开始。