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