2013-04-12 91 views
3

在从sqlite3.h的意见:为什么sqlite3_bind_ *从索引1开始,但sqlite3_column_ *从0开始?

为sqlite3_bind_ , * ^的用于命名参数索引如果需要,可以使用 ** [sqlite3_bind_parameter_index()] API进行查找。 ^“NNN”参数的索引 **是NNN的值。 ** ^的NNN值必须和之间[sqlite3_limit()]

为sqlite3_column_ * ** ^结果集的最左边的列的索引为0 ** ^数结果中的列可以使用 ** [sqlite3_column_count()]确定。

为什么会有这种奇怪的不一致?

回答

2

没有奇怪的不一致性。

sqlite3_bind_*()函数将值与printf样式格式说明符(SQLite3自己的术语中的“主机参数名称”)联系起来。具有类似于函数参数的功能,它匹配约定从1(“第一个参数”,“第二个参数”,...)编号。

相似性:在POSIX C中,printf()函数接受格式字符串可以修改使用%N$c语法,其中c是实际的转换指定的字符或字符序列转换的顺序,和N是一个数字从1开始。

但是,这些列不是参数类实体。它们相当于可索引数据结构中的项目。例如,它们更类似于数组的元素,这就是为什么从零开始索引它们是有意义的。

+2

+1一个很好的解释,但我同意OP,这是不一致的。 –

+0

@SamuelNeff谢谢。事实上,从根本上说,它可能更加一致:我们可以将第0个参数传递给函数。 – 2013-04-12 06:09:12