【问题标题】:In JDBC, why do parameter indexes for prepared statements begin at 1 instead of 0?在 JDBC 中,为什么准备好的语句的参数索引从 1 而不是 0 开始?
【发布时间】:2010-10-11 14:18:16
【问题描述】:

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

【问题讨论】:

  • 我也想知道同样的事情,特别是因为结果集也是 1 索引的。

标签: java jdbc indexing prepared-statement


【解决方案1】:

很可能 JDBC 是以 ODBC 为模型的。

【讨论】:

  • 我认为两者都是在 X/Open 接口上建模的。
【解决方案2】:

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

【讨论】:

  • 这是正则表达式的标准,因为 0 用于表示整个匹配。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    选择 JDBC 是经过深思熟虑的,但最终可能会导致比它解决的更多的困惑和困难。

    【讨论】:

    • 在数学中,使用零索引通常更容易(根据我的经验(三等 BSc))。
    • 我不认为从零开始的索引是一个数学工件。我拥有的每一本线性代数书都以 1 开始对行/列进行编号。如果我没记错的话,FORTRAN 默认从 1 开始。我认为从零开始的索引是 C 和指针算法的遗产。
    • 就我个人而言,我认为基于 0 的索引是 C 指针算法的倒退,它似乎已经卡住了......对我们所有人来说都是不幸的。
    • 使用从 0 开始索引的美妙之处在于:您可以将包含连续 N 元素的区间用作 [0, N)[N, 2N)[2N, 3N) 等等。因此,所有主流语言,如 C、C++、Java、JavaScript、Python,都使用最初在 C 编程语言中使用的从 0 开始的索引约定。这个原则也适用于像[a, b) 这样的通用索引,其中a 是包含的,b 是排除的。
    【解决方案5】:

    我了解 JDBC 和 ODBC 都基于 X/Open 调用级别接口。所以,它是 Java 之前的历史,比如从 0 开始的月份数字。

    【讨论】:

      【解决方案6】:

      这是原始语言设计者为淘汰弱者而策划的阴谋的一部分。在原始规范中,数组从 -1 开始编号,具有 1 个元素的列表返回长度 =0。

      今天,这个恶魔般的情节只剩下 java Calendar API。

      【讨论】:

        猜你喜欢
        • 2015-02-19
        • 2010-11-09
        • 1970-01-01
        • 1970-01-01
        • 2014-03-10
        • 2023-03-19
        • 1970-01-01
        • 2011-03-20
        • 2011-02-16
        相关资源
        最近更新 更多