Java 在JDBC中,为什么准备语句的参数索引从1开始,而不是从0开始?

Java 在JDBC中,为什么准备语句的参数索引从1开始,而不是从0开始?,java,jdbc,indexing,prepared-statement,Java,Jdbc,Indexing,Prepared Statement,在Java的其他地方,任何索引都从0开始。这里的更改是有原因的还是这只是一个糟糕的设计?可能是JDBC是基于ODBC建模的。可能更人性化?此外,Java正则表达式匹配器的组以1作为第一个匹配组开始。我个人认为这是糟糕的设计。历史上,数据库对绑定参数使用基于1的索引。这可能反映了关系数据库在集合论和数学中的起源,关系数据库索引从一开始的元素,并使用零表示空集或空集 在shell脚本和正则表达式中,零索引通常表示“特殊”的含义。例如,对于shell脚本,第0个“参数”实际上是调用的命令 选择JDBC

在Java的其他地方,任何索引都从0开始。这里的更改是有原因的还是这只是一个糟糕的设计?

可能是JDBC是基于ODBC建模的。

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

我个人认为这是糟糕的设计。

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

在shell脚本和正则表达式中,零索引通常表示“特殊”的含义。例如,对于shell脚本,第0个“参数”实际上是调用的命令


选择JDBC是经过深思熟虑的,但最终可能会造成比它解决的问题更多的混乱和困难。

我知道JDBC和ODBC都基于X/Open调用级别接口。因此,这是Java之前的历史,就像以0为基础的月数。

这是最初的语言设计人员清除弱者的计划的一部分。在原始规范中,数组从-1开始编号,具有1个元素的列表返回长度=0


今天,这个可怕的图中只剩下java日历API。

这是正则表达式的标准,因为0表示整个匹配。在数学中,通常更容易使用零索引(以我的经验(第三类BSc))。我不认为基于零的索引是一个数学制品。我的每一本线性代数书都以1开始为行/列编号。如果我没记错的话,FORTRAN默认值为1。我认为基于零的索引是C和指针算法的遗产。就我个人而言,我认为基于零的索引是C指针算法的回溯,它似乎已经卡住了。。。使用基于0的索引的美妙之处在于:您可以使用包含连续
N
元素的区间作为
[0,N)
[N,2N)
因此,所有的主流语言如C、C++、java、JavaScript、Python都使用了C语言中最初使用的基于0的索引约定。[a,b)
其中
a
是包含的,
b
是独占的。我认为两者都是在X/Open界面上建模的。我想知道同样的事情,特别是因为结果集也是1索引的。