【发布时间】:2010-10-11 14:18:16
【问题描述】:
在 Java 中的其他任何地方,任何索引都从 0 开始。这里的更改是否有原因,或者这只是糟糕的设计?
【问题讨论】:
-
我也想知道同样的事情,特别是因为结果集也是 1 索引的。
标签: java jdbc indexing prepared-statement
在 Java 中的其他任何地方,任何索引都从 0 开始。这里的更改是否有原因,或者这只是糟糕的设计?
【问题讨论】:
标签: java jdbc indexing prepared-statement
很可能 JDBC 是以 ODBC 为模型的。
【讨论】:
也许更人性化?此外,Java 的正则表达式 Matcher 的组以 1 作为第一个匹配组开始。
【讨论】:
我个人认为这是糟糕的设计。
【讨论】:
从历史上看,数据库对绑定参数使用从 1 开始的索引。这可能反映了集合论和数学中关系数据库的起源,它索引元素以 1 开头,并使用 0 来表示 null 或空集。
在 shell 脚本和正则表达式中,零索引通常意味着“特殊”。例如,在 shell 脚本的情况下,第零个“参数”实际上是被调用的命令。
选择 JDBC 是经过深思熟虑的,但最终可能会导致比它解决的更多的困惑和困难。
【讨论】:
N 元素的区间用作 [0, N) 和 [N, 2N)、[2N, 3N) 等等。因此,所有主流语言,如 C、C++、Java、JavaScript、Python,都使用最初在 C 编程语言中使用的从 0 开始的索引约定。这个原则也适用于像[a, b) 这样的通用索引,其中a 是包含的,b 是排除的。
我了解 JDBC 和 ODBC 都基于 X/Open 调用级别接口。所以,它是 Java 之前的历史,比如从 0 开始的月份数字。
【讨论】:
这是原始语言设计者为淘汰弱者而策划的阴谋的一部分。在原始规范中,数组从 -1 开始编号,具有 1 个元素的列表返回长度 =0。
今天,这个恶魔般的情节只剩下 java Calendar API。
【讨论】: