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