2013-04-12 82 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