資源簡介
里面對于Sqlite3數據庫2進制數據進行了詳細的解析和對于大部分常用Sqlite3的接口函數做了一定的總結。對于2進制數據eg圖片的操作有實例源代碼提供。
代碼片段和文件信息
#if?0
Sumary?By?Leonard?
Time?:?2017.8.25
針對于sqlite數據庫需要對其2進制數據進行操作的理解
其中主要是利用了sqlite3_stmt這個輔助結構體來進行sql
語句的轉化。
下面是對其blob數據的插和查詢操作。查詢操作呢,主要是
利用了pTemplate?=?sqlite3_column_blob(?stat?1?);
??int?length?=?sqlite3_column_bytes(?stat?1?);
這兩個接口操作。其中pTemplate是查詢到的數據保存的一個
一維數組。
??result?=?sqlite3_reset(stat);這個接口函數是重新
將sqlite3_prepare的stat輔助工具再次解析,然后可以利用
sqlite3_bind_blob()函數再次進行轉換后可以sqlite3_step
函數進行sql語句操作。
sqlite3_column_text(stat?1?)?取text類型的數據。???1表示第1個字段?也就是第1列
sqlite3_column_blob(stat?2?),取blob類型的數據???
sqlite3_column_int(stat?3?)?取int類型的數據
sqlite3_errcode()?通常用來獲取最近調用的API接口返回的錯誤代碼.??
sqlite3_errmsg()?則用來得到這些錯誤代碼所對應的文字說明.?這些
錯誤信息將以?UTF-8?的編碼返回并且在下一次調用任何SQLite?API函
數的時候被清除.?sqlite3_errmsg16()?和?sqlite3_errmsg()?大體上
相同除了返回的錯誤信息將以?UTF-16?本機字節順序編碼.
如果要創建新數據庫?sqlite3_open16()?將內部文本轉換為UTF-16編碼?
反之sqlite3_open()?將文本轉換為UTF-8編碼.
sqlite3_prepare()?處理的SQL語句應該是UTF-8編碼的.?
而?sqlite3_prepare16()?則要求是UTF-16編碼的.?輸入的參數中只有第一個
SQL語句會被編譯.?第四個參數則用來指向輸入參數中下一個需要編譯的SQL語
句存放的SQLite?statement對象的指針?任何時候如果調用?sqlite3_finalize()?
將銷毀一個準備好的SQL聲明.?在數據庫關閉之前,所有準備好的聲明都必須被
釋放銷毀.?sqlite3_reset()?函數用來重置一個SQL聲明的狀態,使得它可以被再次執行.
int?sqlite3_bind_blob(sqlite3_stmt*?int?const?void*?int?n?void(*)(void*));
int?sqlite3_bind_double(sqlite3_stmt*?int?double);
int?sqlite3_bind_int(sqlite3_stmt*?int?int);
int?sqlite3_bind_int64(sqlite3_stmt*?int?long?long?int);
int?sqlite3_bind_null(sqlite3_stmt*?int);?????????
int?sqlite3_bind_text(sqlite3_stmt*?int?const?char*?int?n?void(*)(void*));
int?sqlite3_bind_text16(sqlite3_stmt*?int?const?void*?int?n?void(*)(void*));?????????
int?sqlite3_bind_value(sqlite3_stmt*?int?const?sqlite3_value*);?
以上是?sqlite3_bind?所包含的全部接口,它們是用來給SQL聲明中的通配符賦值的.?
沒有綁定的通配符則被認為是空值.?綁定上的值不會被sqlite3_reset()函數重置.?
但是在調用了sqlite3_reset()之后所有的通配符都可以被重新賦值.??在SQL聲明準備好之后(其中綁定的步驟是可選的)
需要調用以下的方法來執行:?????????
int?sqlite3_step(sqlite3_stmt*);???
如果SQL返回了一個單行結果集,sqlite3_step()?函數將返回?SQLITE_ROW??如果SQL語句執行成功或者正常將返回?SQLITE_DONE??
否則將返回錯誤代碼.?如果不能打開數據庫文件則會返回?SQLITE_BUSY?.?
如果函數的返回值是?SQLITE_ROW?那么下邊的這些方法可以用來獲得記錄集行中的數據:??????????
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);????????
int?sqlite3_column_count(sqlite3_stmt*);?????????
const?char?*sqlite3_column_decltype(sqlite3_stmt?*?int?iCol);????????
const?void?*sqlite3_column_decltype16(sqlite3_stmt?*?int?iCol);????????
double?sqlite3_column_double(sqlite3_stmt*?int?iCol);????????
int?sqlite3_column_int(sqlite3_stmt*?int?iCol);?????????
long?long?int?sqlite3_column_int64(sqlite3_stmt*?int?iCol);????????
const?char?*sqlite3_column_name(sqlite3_stmt*?int?iCol);????????
const?void?*sqlite3_column_name16(sqlite3_stmt*?int?iCol);????????
const?unsigned?char?*sqlite3_column_text(sqlite3_stmt*?int?iCol);?????????
const?void?*sqlite3_column_text16(sqlite3_stmt*?int?
評論
共有 條評論