文章出處
文章列表
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程序員對他們都很熟悉。
文章列表
全站熱搜