JDBCで、準備済みステートメントのパラメーターインデックスが0ではなく1で始まるのはなぜですか?
-
03-07-2019 - |
質問
Javaの他のどこでも、インデックスを持つものは0から始まります。ここで変更する理由はありますか、それとも単に悪い設計ですか?
解決
歴史的に、データベースはバインドされたパラメーターに1から始まるインデックスを使用していました。これはおそらく、1で始まる要素にインデックスを付け、nullまたは空のセットを表すためにゼロを使用する、セット理論と数学におけるリレーショナルデータベースの起源を反映している。
シェルスクリプトおよび正規表現では、ゼロインデックスは通常、「特別な」何かを意味します。たとえば、シェルスクリプトの場合、0番目の"引数"実際に呼び出されたコマンドです。
JDBCの選択は意図的なものでしたが、最終的にはおそらく解決するよりも多くの混乱と困難を引き起こします。
他のヒント
これは、弱者を排除するための元の言語設計者による計画の一部でした。元の仕様では、配列には-1から番号が付けられ、1要素のリストは長さ= 0を返しました。
今日、この悪魔のようなプロットからは、Java Calendar APIのみが残っています。
個人的には、これを悪いデザインだと思います。
JDBCとODBCの両方がX / Open Call Level Interfaceに基づいていることを理解しています。そのため、0から始まる月数のようなJava以前の履歴です。
同様に、JDBCはODBCでモデル化されています。
もっと人間に優しい?また、Java正規表現Matcherグループは、最初に一致したグループとして1から始まります。
所属していません StackOverflow