SQLite中如何用api操作BLOB类型的字段

前端之家收集整理的这篇文章主要介绍了SQLite中如何用api操作BLOB类型的字段前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


在实际的编程开发当中我们经常要处理一些大容量二进制数据的存储,如图片或者音乐等等。对于这些二进制数据(blob字段)我们不能像处理普通的文本那样简单的插入或者查询,为此sqlite提供了一组函数来处理这种BLOB字段类型。下面的代码演示了如何使用这些API函数

首先创建一个数据库,然后创建一个数据表:

nsqSt = sqlite3_exec( handle,"CREATE TABLE IF NOT EXISTS PARAMETERS ( FULLNAME TEXT PRIMARY KEY,VT INTEGER,LENGTH VALUE BLOB,USEFUNC INTEGER )",NULL,NULL); 

insertParaWithValue演示了插入blob数据

dbHandle是调用这个函数就可以获得 sqlite3_open_v2( DM_DB_FILENAME,&dbHandle,sqlITE_OPEN_READWRITE | sqlITE_OPEN_CREATE,NULL );

int insertParaWithValue(DBHANDLE dbHandle,51); font-weight:bold">const char* pszParaName,51); font-weight:bold">int type,51); font-weight:bold">void* pData,51); font-weight:bold">int cbData ) {
	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+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,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 updateParaRecordWithValue(DBHANDLE dbHandle,68)">"UPDATE PARAMETERS SET VT=%d,LENGTH=%d,VALUE=?,USEFUNC=0 WHERE FULLNAME='%s'";
	sqlite3_stmt* pstmt=NULL;
	return nRet;
}

getParaRecordWithValue演示了如何查询使用

getParaRecordWithValue(DBHANDLE dbHandle,51); font-weight:bold">int* pType,51); font-weight:bold">void** ppData,51); font-weight:bold">int* pCbData ) {
	int nRet = ERROR;
	sqlite3_stmt* pstmt=NULL;
	"SELECT VT,VALUE FROM PARAMETERS WHERE FULLNAME='%s'";
	1); 
	return nRet;
	
	if(nRet!=sqlITE_OK)
	{
		DMFree(psql);
		return nRet;
	}
	DMFree(psql);
	psql=NULL;
	
	nRet = sqlite3_step(pstmt);
	if(nRet!=sqlITE_ROW)
	{
		sqlite3_finalize(pstmt );
		return nRet;
	}
	
	nRet = sqlITE_OK;
	
	if(pType)
	{
		*pType = sqlite3_column_int(pstmt,128)">0 );
	}
	
	if(pCbData )
	{
		*pCbData = sqlite3_column_int(pstmt,128)">1 );
	}
	
	if(ppData && pCbData)
	{
		*ppData = DMMalloc(*pCbData);
		if(*ppData == NULL )
		{
			sqlite3_finalize(pstmt );
			return ERROR;
		}
		void* pV = sqlite3_column_blob(pstmt,128)">2);
		if( pV!=NULL )
			memcpy(*ppData,pV,*pCbData);
	}
	sqlite3_finalize(pstmt );
	return nRet;
}

猜你在找的Sqlite相关文章