文章出處

sqlite3_column_value()的返回對象是一個 unprotected sqlite3_value 對象.一個不受保護的sqlite3_value object可能只能用于 sqlite3_bind_value()sqlite3_result_value().如果一個unprotected sqlite3_value 對象( sqlite3_column_value()函數的返回值) 被用在其他地方,包括調用如 sqlite3_value_int(), sqlite3_value_text(), 或sqlite3_value_bytes()之類的函數,它的行為是不可預測的。

這些函數嘗試把值轉化成正確的類型。比如說,對儲存在數據庫中,值類型為FLOAT的字段,通過但是作為text類型被select出來。sqlite3_snprintf()將自動轉換這個數值。下表詳細地說明了轉化過程。

內部類型(Internal Type 請求類型               Requested Type 轉化(Conversion
NULL INTEGER 值為 0
NULL FLOAT 值為 0.0
NULL TEXT 值為 NULL指針
NULL BLOB 值為 NULL指針
INTEGER FLOAT 從integer 轉化為float
INTEGER TEXT   integer渲染成ASCII
INTEGER BLOB INTEGER->TEXT轉換過程一樣
FLOAT INTEGER 從float 轉化為integer
FLOAT TEXT   FLOAT渲染成ASCII
FLOAT BLOB FLOAT->TEXT轉換過程一樣
TEXT INTEGER 使用 atoi()
TEXT FLOAT 使用 atof()
TEXT BLOB 不做改變
BLOB INTEGER 轉化為TEXT 然后使用 atoi()
BLOB FLOAT 轉化為TEXT 然后使用 atof()
BLOB TEXT 如果需要的話,添加0作為終結符

上表引用C函數庫的atoi() 和atof()。實際上,SQLite不會使用這些函數,SQLite有自己跟這些函數等價的轉換函數。使用atoi() 和atof()是為了讓上表更簡短,因為大部分的C程序員對他們都很熟悉。


文章列表


不含病毒。www.avast.com
全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()