SQLite中sqlite3_column_value()的返回值


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程序員對他們都很熟悉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM