1.
儲存二進位制資料
sqlite
提供的繫結二進位制引數介面函式為:
int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
我們希望使用的是一套經過封裝的
com介面,將上面這個函式封裝為
com介面的形式
bindparabyindex( long index, variant val); 使用
variant
變數來傳遞二進位制資料,可以使用到它的乙個
safearray
指標,它儲存了二進位制資料的位址和二進位制資料的位元組長度。
在我們的
com介面中可以這樣進行呼叫原始介面:
sqlite3_bind_blob(m_pstmt, val.parray, val.parray->rsground->celement,sqlite_transient);
構造乙個例子測試我們的介面:
byte
data = ;
ccomsafearray
*pcsfa;
ccomsafearraybound
bound[1];
bound[0].setcount(5);
bound[0].setlowerbound(0);
pcsfa = new
ccomsafearray
(bound,1);
for(long
i = 0; i
<(long)5; i++)
_variant_t
variant;
variant.vt = vt_array | vt_ui1;
variant.parray = pcsfa->m_psa;
將五個位元組的資料封裝到variant變數中,然後呼叫相應的介面,將它們儲存到資料庫中,然後
呼叫下面的讀取二進位制介面,將資料讀取出來,看是否讀取的資料和儲存的資料一致. 2.
讀取二進位制資料
讀取二進位制引數需要用到下面兩個
sqlite
提供的api
:const void *sqlite3_column_blob(sqlite3_stmt*, int icol);
int sqlite3_column_bytes(sqlite3_stmt*, int icol);
訪問也通過com介面來實現:
getblobdata(long index, variant* pval);
如何將原始介面讀出來的資料封裝到variant結構中去呢,網上這方面的參考資料好少,差了不少資料,發現網上有不上safearray的實現方案,但是我一一試了一下沒有乙個可以將二進位制數讀入safearray結構的,mentor給我推薦了乙個ccomsafearray類,這個類成功實現了資料的儲存。
ccomvariant
cval;
intnlen = sqlite3_column_bytes(m_pstmt,nindex);
const
void* pcvdata = (const
void*)sqlite3_column_blob(m_pstmt,nindex);
byte
* pdata = new
byte[nlen];
memcpy
(pdata,pcvdata,nlen);
ccomsafearray
*pcsfa;
ccomsafearraybound
bound[1];
bound
[0].setcount(nlen);
bound
[0].setlowerbound(0);
pcsfa
= new
ccomsafearray
(bound,1);
for(long
i = 0; i
<(long)nlen; i++)
cval
= pcsfa->m_psa;
cval
.vt = vt_array | vt_ui1;
delete
pdata;
cval.detach(pval);
ok,現在可以通過下面的**來測試是否成功讀取了所有的二進位制資料。測試**如下:
_variant_t val;
val = getblobdata(nindex); //nindex
表示blob型別資料的索引值
byte
buf[5];
if(val.vt == (vt_ui1|vt_array))
}for
(int
j = 0; j
< 5; j++)
SQLite資料庫儲存
建立資料庫 建立資料庫,首先我們需要建立乙個幫助類繼承sqliteopenhelper類,sqliteopenhelper類是乙個抽象類,其中有兩個抽象方法,oncreate upgrade 我們應該在自己的抽象類裡面實現這兩個抽象方法,並在其中事項建立資料庫和公升級資料庫的邏輯。sqliteope...
Sqlite資料庫儲存和Android單元測試
1.路徑 data data packagename database db 2.特點 儲存有一定關係結構的資料 應用解除安裝時自動刪除 3.sqlite的特點 小 快 4.相關api 1 sqliteopenhelper 資料庫操作的抽象幫助類 sqliteopenhelper context c...
SQLite儲存 建立資料庫
從昨天晚上六點到今天早上八點全班同學一直都在別墅趴 玩得好開心 此乃本人的學習筆記 我只是將csdn部落格做為乙個記錄學習的地方 so.1.自己重寫乙個類繼承至sqliteopenhelper 2.用繼承的類建立乙個物件 3.使用此物件呼叫getwritabledatabase 或getreadab...