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

SQLite中如何用api *** 作BLOB类型的字段,第1张

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

在实际的编程开发当中我们经常要处理一些大容量二进制数据的存储,如图片或者音乐等等。对于这些二进制数据(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类型的字段所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1166130.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存