为什么sqlite3_bind_ *从索引1开始但sqlite3_column_ *从0开始?

时间:2013-04-12 03:57:13

标签: sqlite

在sqlite3.h的评论中:

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

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

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

1 个答案:

答案 0 :(得分:5)

没有奇怪的不一致。

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

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

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