在Java的其他地方,任何索引都是从0开始的。这里有没有改变的原因,或者这只是糟糕的设计?在JDBC中,为什么准备语句的参数索引从1开始而不是从0开始?
回答
从历史上看,数据库使用基于1的索引来绑定参数。这可能反映了集合论和数学中关系数据库的起源,这些关系数据索引以1开始的元素,并用零表示空集或空集。
在shell脚本和正则表达式中,零索引通常意味着“特殊”的东西。例如,在shell脚本的情况下,第零个“参数”实际上是被调用的命令。
JDBC的选择是故意的,但最终可能会导致更多的困惑和困难。
在数学中,通常使用零索引(根据我的经验(第三级BSc))更容易。 – 2009-03-05 19:18:48
可能是因为JDBC是在ODBC上建模的。
我认为两者都是在X/Open界面上建模的。 – 2009-03-05 19:21:06
更人性化可能吗?此外,Java的正则表达式Matcher的组以1开头,作为第一个匹配的组。
这是标准的正则表达式,因为0用于表示整个匹配。 – Eclipse 2009-03-05 19:06:59
就我个人而言,我会粉饰这糟糕的设计。
我知道JDBC和ODBC都基于X/Open Call Level Interface。所以,这是Java之前的历史,就像基于0的月份数字一样。
这是由原始语言设计者去除弱点的阴谋的一部分。在原始规范中,数组从-1开始编号,而带有1个元素的列表返回length = 0。
今天,只有Java Calendar API仍然来自这个恶魔般的阴谋。
- 1. 为什么应该从0开始而不是从1开始?
- 2. 为什么sqlite3_bind_ *从索引1开始,但sqlite3_column_ *从0开始?
- 3. 为什么增量计数从0开始而不是从1开始?
- 4. 为什么inode数字从1开始而不是0?
- 5. 为什么MySQL从1开始计数而不是0?
- 6. 为什么我的集合决定从0开始而不是1开始?
- 7. 为什么从std :: placeholders :: _ 1开始而不是_0开始?
- 8. 酒吧从1开始而不是0
- 9. 从1开始代码而不是0?
- 10. 猪:排名从索引0开始,而不是1?
- 11. 从范围开始的Excel VBA数组从-1开始而不是0
- 12. 鼠标点击坐标索引从0开始还是从1开始?
- 13. 什么是从索引0开始的未知单词是指?
- 14. NSMutableArray:initWithObjects是否从索引0开始?
- 15. For循环从0001开始而不是从1开始
- 16. 从位置1开始NSArray不是0
- 17. 了解数组:索引从0开始
- 18. 为什么我的循环似乎从索引1开始?
- 19. PLPGSQL数组索引从1开始?
- 20. 从1而不是0开始json_encode数字键
- 21. AnimationSet中的TranslateAnimation不是从0开始的,为什么?
- 22. NSMutableArray的索引不是以0开始
- 23. 如何从0开始阵列时,索引从1
- 24. each_with_index_do从1开始的索引
- 25. jquery - 从1开始的索引元素?
- 26. MSChart的X轴开始从-1而不是0
- 27. GridLayout索引0从左下角开始
- 28. 代表日期从长,从0年开始,而不是从1970年开始
- 29. PHPExcel行从1开始,列为0
- 30. 为什么mkdir模式参数从0开始?
我想知道同样的事情,特别是因为ResultSets也是1索引。 – Uri 2010-04-03 20:24:40