在JDBC中,为什么预准备语句的参数索引从1开始而不是0?
-
03-07-2019 - |
题
Java中的其他任何地方,索引的任何内容都从0开始。这里有变化的原因还是这个设计不好?
解决方案
历史上,数据库对绑定参数使用了基于1的索引。这可能反映了集合论和数学中关系数据库的起源,它们以1开头索引元素,并使用零来表示空集或空集。
在shell脚本和正则表达式中,零索引通常意味着“特殊”的东西。例如,在shell脚本的情况下,第0个“参数”是实际上是被调用的命令。
JDBC的选择是故意的,但最终可能会导致比它解决的更多混乱和困难。
其他提示
这是原始语言设计师清除弱者的情节的一部分。在原始规范中,数组从-1开始编号,而包含1个元素的列表返回长度= 0。
今天,只有java Calendar API仍然来自这个恶魔般的情节。
就个人而言,我会将其归结为糟糕的设计。
我知道JDBC和ODBC都基于X / Open Call Level Interface。因此,它是Java之前的历史记录,就像基于0的月份数字一样。
可能是JDBC在ODBC上建模。
可能更人性化?此外,Java正则表达式Matcher组以1作为第一个匹配组开始。
不隶属于 StackOverflow