En cualquier otro lugar de Java, cualquier elemento con un índice comienza en 0. ¿Hay alguna razón para el cambio aquí o es solo un mal diseño?En JDBC, ¿por qué los índices de parámetros para las declaraciones preparadas comienzan en 1 en lugar de 0?
Respuesta
Históricamente, las bases de datos han utilizado la indexación basada en 1 para los parámetros vinculados. Esto probablemente refleja los orígenes de las bases de datos relacionales en la teoría de conjuntos y las matemáticas, que indexan elementos que comienzan con uno, y usan cero para representar un conjunto nulo o vacío.
En scripts de shell y expresiones regulares, el índice cero generalmente significa algo "especial". Por ejemplo, en el caso de los scripts de shell, el "argumento" zeroth es en realidad el comando invocado.
La elección de JDBC fue deliberada pero, en última instancia, probablemente causa más confusión y dificultad de la que resuelve.
En matemáticas, generalmente es más fácil ir con indexación cero (en mi experiencia (BSc de tercera clase)). –
No creo que la indexación basada en cero sea un artefacto matemático. Cada libro de álgebra lineal que tengo comienza a numerar filas/columnas con 1. FORTRAN está predeterminado desde 1, si no recuerdo mal. Creo que la indexación basada en cero es un legado de C y la aritmética de punteros. – duffymo
Personalmente, creo que la indexación basada en 0 es un retroceso de la aritmética del puntero C que parece haberse pegado ... a la desgracia de todos nosotros. –
Probablemente es que JDBC se modeló en ODBC.
Creo que ambos fueron modelados en una interfaz X/Open. –
¿Más humano amistoso quizás? Además, el grupo de Matcher de la expresión regular de Java comienza con 1 como el primer grupo coincidente.
Esto es estándar con expresiones regulares, ya que 0 se usa para significar la coincidencia completa. – Eclipse
Personalmente me gustaría añadir esto al mal diseño.
Entiendo que tanto JDBC como ODBC se basan en la interfaz X/Open Call Level. Entonces, es el historial previo a Java, como los números de mes basados en 0.
Esto fue parte de una trama de los diseñadores del lenguaje original para eliminar a los débiles. En la especificación original, las matrices se numeraron de -1, y las listas con 1 elemento devolvieron longitud = 0.
Hoy, solo la API de calendario de Java permanece de este diagrama diabólico.
- 1. ¿Por qué los índices vectoriales en R comienzan con 1, en lugar de 0?
- 2. ¿Por qué los números de inodo comienzan en 1 y no en 0?
- 3. Declaraciones preparadas y controladores JDBC
- 4. Recursividad en declaraciones preparadas
- 5. Declaraciones preparadas en VB.NET
- 6. Java JDBC - Inserción masiva de varias declaraciones preparadas
- 7. ¿Qué son las declaraciones preparadas por el cliente?
- 8. ¿Cómo funcionan las declaraciones preparadas?
- 9. Spring NamedParameterJDBCTemplate reutilización de las declaraciones preparadas
- 10. Los valores de la columna de identidad del servidor SQL comienzan en 0 en lugar de 1
- 11. ¿Los índices de matriz están basados en 0 en VB6?
- 12. ¿Las declaraciones preparadas evitarán los ataques de inyección sql?
- 13. ¿Por qué no puedes pasar las funciones de MYSQL a las declaraciones de PDO preparadas?
- 14. ¿Por qué 0 && 1 es 1 mientras que 1 && 0 es 0 en ruby?
- 15. ¿Qué significan los números que comienzan con 0 en python?
- 16. 0 en [1, 2] == cierto, ¿por qué?
- 17. En SQLite, ¿las declaraciones preparadas realmente mejoran el rendimiento?
- 18. Poniendo tiempos de espera en las declaraciones preparadas
- 19. cuán seguras son las declaraciones preparadas por PDO
- 20. mysql declaraciones preparadas permanentemente
- 21. Cierre de declaraciones preparadas
- 22. ¿Las declaraciones preparadas ralentizan notablemente el programa?
- 23. Para usar declaraciones preparadas por PHP para Postgres
- 24. Uso de declaraciones preparadas con JDBCTemplate
- 25. DIferencia entre los procedimientos almacenados y las declaraciones preparadas ..?
- 26. agrupación de conexiones y declaraciones preparadas con groovy.sql.Sql o JDBC en Grails
- 27. ¿Por qué los índices de Scala tuples están basados en 1?
- 28. ¿Qué tokens se pueden parametrizar en declaraciones preparadas con PDO?
- 29. C# Las declaraciones preparadas - símbolo @ (en/signo strudel) busca
- 30. ¿Por qué ~ 0 es -1?
Me preguntaba lo mismo, especialmente porque los ResultSets también tienen 1 índice. – Uri