sqlite3_column
這個過程從執行sqlite3_step()執行一個準備語句得到的結果集的當前行中返回一個列。每次sqlite3_step得到一個結果集的列停下后,這個過程就可以被多次調用去查詢這個行的各列的值。對列操作是有多個函數,均以sqlite3_column為前綴
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
double sqlite3_column_double(sqlite3_stmt*, int iCol);
int sqlite3_column_int(sqlite3_stmt*, int iCol);
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
int sqlite3_column_type(sqlite3_stmt*, int iCol);
sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol);
說明
第一個參數為從sqlite3_prepare返回來的prepared statement對象的指針,第二參數指定這一行中的想要被返回的列的索引。最左邊的一列的索引號是0,行的列數可以使用sqlite3_colum_count()獲得。
這些過程會根據情況去轉換數值的類型,sqlite內部使用sqlite3_snprintf()去自動進行這個轉換,下面是關于轉換的細節表:
| 內部類型 | 請求的類型 | 轉換 |
| NULL | INTEGER | 結果是0 |
| NULL | FLOAT | 結果是0.0 |
| NULL | TEXT | 結果是NULL |
| NULL | BLOB | 結果是NULL |
| INTEGER | FLOAT | 從整形轉換到浮點型 |
| INTEGER | TEXT | 整形的ASCII碼顯示 |
| INTEGER | BLOB | 同上 |
| FLOAT | INTEGER | 浮點型轉換到整形 |
| FLOAT | TEXT | 浮點型的ASCII顯示 |
| FLOAT | BLOB | 同上 |
| TEXT | INTEGER | 使用atoi() |
| TEXT | FLOAT | 使用atof() |
| TEXT | BLOB | 沒有轉換 |
| BLOB | INTEGER | 先到TEXT,然后使用atoi |
| BLOB | FLOAT | 先到TEXT,然后使用atof |
| BLOB | TEXT | 如果需要的話添加0終止符 |
?
注:BLOB數據類型是指二進制的數據塊,比如要在數據庫中存放一張圖片,這張圖片就會以二進制形式存放,在sqlite中對應的數據類型就是BLOB
?
int sqlite3_column_bytes(sqlite3_stmt*, int iCol)int sqlite3_column_bytes16(sqlite3_stmt*, int iCol)兩個函數返回對應列的內容的字節數,這個字節數不包括后面類型轉換過程中加上的0終止符。
下面是幾個最安全和最簡單的使用策略
- 先sqlite3_column_text()?,然后?sqlite3_column_bytes()
- 先sqlite3_column_blob(),然后sqlite3_column_bytes()
- 先sqlite3_column_text16(),然后sqlite3_column_bytes16()
總結
以上是生活随笔為你收集整理的sqlite3_column的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一次/初次办信用卡审批不通过
- 下一篇: 网络编程常用接口的内核实现----sys