Überall sonst in Java beginnt alles mit einem Index bei 0. Gibt es einen Grund für den Wechsel hier oder ist das nur schlechtes Design?Warum beginnen Parameterindizes für vorbereitete Anweisungen in JDBC bei 1 statt 0?
Antwort
In der Vergangenheit verwendeten Datenbanken 1-basierte Indizierung für gebundene Parameter. Dies spiegelt wahrscheinlich die Ursprünge relationaler Datenbanken in der Mengentheorie und Mathematik wider, die Elemente beginnend mit eins indexieren und null verwenden, um eine leere oder leere Menge darzustellen.
In Shell-Skripten und regulären Ausdrücken bedeutet der Nullindex normalerweise etwas "Besonderes". Im Fall von Shell-Skripten ist das nullte "Argument" beispielsweise der Befehl, der aufgerufen wurde.
Die Wahl für JDBC war absichtlich, aber letztlich verursacht wahrscheinlich mehr Verwirrung und Schwierigkeiten, als es löst.
In der Mathematik ist es normalerweise einfacher, mit Nullindexierung zu gehen (meiner Erfahrung nach (dritte Klasse BSc)). –
Ich glaube nicht, dass Zero-basierte Indexierung ein mathematisches Artefakt ist. Jedes lineare Algebra-Buch, das ich habe, fängt an, Zeilen/Spalten mit 1. FORTRAN-Voreinstellungen von 1 zu nummerieren, wenn ich mich richtig erinnere. Ich denke, Zero-basierte Indexierung ist ein Vermächtnis von C und Zeigerarithmetik. – duffymo
Persönlich denke ich, 0-basierte Indexierung ist ein Rückfall von C-Zeiger-Arithmetik, die zu dem Unglück von uns allen zu stecken scheint. –
Wahrscheinlich wurde JDBC ODBC modelliert.
Ich denke, beide wurden auf einer X/Open-Schnittstelle modelliert. –
Mehr menschlich freundlich vielleicht? Außerdem beginnt die Matcher-Gruppe für reguläre Ausdrücke in Java mit 1 als erste übereinstimmende Gruppe.
Dies ist Standard bei regulären Ausdrücken, da 0 für die gesamte Übereinstimmung steht. – Eclipse
Persönlich würde ich dies zu schlechtem Design kreieren.
Ich verstehe sowohl JDBC als auch ODBC basieren auf dem X/Open Call Level Interface. Also, es ist Pre-Java-Geschichte, wie 0-basierte Monatszahlen.
Dies war Teil einer Handlung der ursprünglichen Sprache Designer, um die Schwachen auszusondern. In der ursprünglichen Spezifikation wurden Arrays von -1 nummeriert und Listen mit 1 zurückgegebenen Element length = 0.
Heute bleibt nur die Java-Kalender-API von diesem diabolischen Diagramm übrig.
- 1. Warum entscheidet meine Sammlung, bei 0 statt 1 zu beginnen?
- 2. SQL Server-Identitätsspaltenwerte beginnen bei 0 statt 1
- 3. Vorbereitete Anweisungen und JDBC-Treiber
- 4. SQL-Injection ohne vorbereitete Anweisungen verhindern (JDBC)
- 5. eine Variable statt einen Parameter Index mit einem JDBC verwendet vorbereitete Anweisung
- 6. Vorbereitete Anweisungen in dbcp + spring + hibernate + jdbc deaktivieren?
- 7. MySQLi vorbereitete Anweisungen Fehlerberichterstattung
- 8. Warum beginnen Inode-Nummern von 1 und nicht 0?
- 9. mysql permanent vorbereitete Anweisungen
- 10. Wie funktionieren vorbereitete Anweisungen?
- 11. vorbereitete Anweisungen mit psycopg
- 12. MySQLi vorbereitete Anweisungen?
- 13. vorbereitete Anweisungen in rails/activerecord
- 14. Vorbereitete Anweisungen von PHP für Postgres verwenden
- 15. Anweisungen in jdbc
- 16. Was sind clientseitig vorbereitete Anweisungen?
- 17. Warum ist ~ 0 -1?
- 18. Vorbereitete Anweisungen mit mehreren Werten
- 19. Model.delete_all und die IDs beginnen bei 1 beginnen?
- 20. Vorbereitete Anweisungen und Klassenvererbung in PHP
- 21. Vorbereitete Anweisungen - Anzahl der Zeilen
- 22. mysqli vorbereitete Anweisungen und mysqli_real_escape_string
- 23. PHP - PDO SQLite3 vorbereitete Anweisungen
- 24. Vorbereitete Anweisungen und ihre Auswirkungen auf Abfragen
- 25. pdo vorbereitete Anweisungen mit Wildcards
- 26. Vorbereitete Anweisungen mit MySQL in .Net @ VS.?
- 27. Wie vorbereitete Anweisungen in Zend Framework verwenden
- 28. Konvertieren (0,1,0, 0, 1, 1, 1) zu (0, 0, 0, 1, 0, 1, 2) in R
- 29. Sind vorbereitete Anweisungen in eingebetteten MySQL unterstützt
- 30. MySQLi vorbereitete Anweisungen mit IN-Operator
Ich frage mich das gleiche, vor allem da ResultSets auch 1-indiziert sind. – Uri