在实际的编程开发当中我们经常要处理一些大容量二进制数据的存储,如图片或者音乐等等。对于这些二进制数据(blob字段)我们不能像处理普通的文本那样简单的插入或者查询,为此sqlite提供了一组函数来处理这种BLOB字段类型。下面的代码演示了如何使用这些API函数。
首先创建一个数据库,然后创建一个数据表:
nsqSt = sqlite3_exec( handle,"CREATE@H_502_9@ table@H_502_9@ IF@H_502_9@ NOT@H_502_9@ EXISTS@H_502_9@ ParaMETERS ( FulLname TEXT@H_502_9@ PRIMARY@H_502_9@ KEY@H_502_9@,VT INTEGER@H_502_9@,LENGTH VALUE@H_502_9@ BLOB@H_502_9@,USEFUNC INTEGER@H_502_9@ )",NulL,NulL); @H_502_9@@H_502_9@
insertParaWithValue演示了插入blob数据 dbHandle是调用这个函数就可以获得 sqlite3_open_v2( DM_DB_filename,&dbHandle,sqlITE_OPEN_READWRITE | sqlITE_OPEN_CREATE,NulL );
int@H_502_9@ insertParaWithValue@H_502_9@(DBHANDLE dbHandle,51); Font-weight:bold">const@H_502_9@ char@H_502_9@* pszParaname,51); Font-weight:bold">int@H_502_9@ type,51); Font-weight:bold">voID@H_502_9@* pData,51); Font-weight:bold">int@H_502_9@ cbData )@H_502_9@ @H_502_9@{ char@H_502_9@* pTmp = "INSERT INTO ParaMETERS( FulLname,VT,LENGTH,VALUE,USEFUNC) VALUES('%s',%d,?,0)"@H_502_9@; size_t@H_502_9@ nTmp = strlen@H_502_9@( pTmp ); char@H_502_9@* psql = DMMalloc( nTmp+strlen@H_502_9@(pszParaname)+11@H_502_9@+1@H_502_9@); /*32bit decimal int max length is 11*/@H_502_9@ if@H_502_9@(psql==NulL) return@H_502_9@ ERROR; sprintf@H_502_9@( psql,pTmp,pszParaname,type,cbData); sqlite3_stmt* pstmt=NulL; int@H_502_9@ nRet=sqlite3_prepare_v2(dbHandle,psql,-1@H_502_9@,&pstmt,NulL ); if@H_502_9@(nRet!=sqlITE_OK) { goto@H_502_9@ ERR; } DMFree(psql); psql=NulL; nRet=sqlite3_bind_blob(pstmt,goto@H_502_9@ ERR; } nRet = sqlite3_step(pstmt); if@H_502_9@(nRet!=sqlITE_DONE) { goto@H_502_9@ ERR; } nRet = sqlITE_OK; sqlite3_finalize(pstmt ); return@H_502_9@ nRet;ERR: if@H_502_9@(pstmt) sqlite3_finalize(pstmt ); if@H_502_9@(psql) DMFree(psql); return@H_502_9@ nRet;}
updateParaRecorDWithValue演示了更新BLOB数据 static@H_502_9@ updateParaRecorDWithValue@H_502_9@(DBHANDLE dbHandle,68)">"UPDATE ParaMETERS SET VT=%d,LENGTH=%d,VALUE=?,USEFUNC=0 WHERE FulLname='%s'"@H_502_9@; return@H_502_9@ nRet;}
getParaRecorDWithValue演示了如何查询使用 getParaRecorDWithValue@H_502_9@(DBHANDLE dbHandle,51); Font-weight:bold">int@H_502_9@* pType,51); Font-weight:bold">voID@H_502_9@** ppData,51); Font-weight:bold">int@H_502_9@* pCbData )@H_502_9@ @H_502_9@{ int@H_502_9@ nRet = ERROR; sqlite3_stmt* pstmt=NulL; "SELECT VT,VALUE FROM ParaMETERS WHERE FulLname='%s'"@H_502_9@; 1@H_502_9@); return@H_502_9@ nRet; if@H_502_9@(nRet!=sqlITE_OK) { DMFree(psql); return@H_502_9@ nRet; } DMFree(psql); psql=NulL; nRet = sqlite3_step(pstmt); if@H_502_9@(nRet!=sqlITE_ROW) { sqlite3_finalize(pstmt ); return@H_502_9@ nRet; } nRet = sqlITE_OK; if@H_502_9@(pType) { *pType = sqlite3_column_int(pstmt,128)">0@H_502_9@ ); } if@H_502_9@(pCbData ) { *pCbData = sqlite3_column_int(pstmt,128)">1@H_502_9@ ); } if@H_502_9@(ppData && pCbData) { *ppData = DMMalloc(*pCbData); if@H_502_9@(*ppData == NulL ) { sqlite3_finalize(pstmt ); return@H_502_9@ ERROR; } voID@H_502_9@* pV = sqlite3_column_blob(pstmt,128)">2@H_502_9@); if@H_502_9@( pV!=NulL ) memcpy@H_502_9@(*ppData,pV,*pCbData); } sqlite3_finalize(pstmt ); return@H_502_9@ nRet;}
总结 以上是内存溢出为你收集整理的SQLite中如何用api *** 作BLOB类型的字段全部内容,希望文章能够帮你解决SQLite中如何用api *** 作BLOB类型的字段所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)