标签:
一:将数据以二进制的形式存储到数据库
这里,我们以float一维数组的形式存储多个点的坐标:
思路:先将float数组转化为char数组,然后将其转化为safeArray并存储到BLOB数据中,然后存储在数据库中的image字段中。
1:将float数组转化为char数组:
函数
输入:flaot一维数组 数组中包含个数n
输出:char一维数组
具体代码:
char *ptVal = new char[n*sizeof(float)];//用于存储转化得到的char数组
for(int i = 0; i<n; i++)
{
char *m = new char[sizeof(float)];
float temp = f[i];//每次从float数组中取出一个对象
memcpy(m,&temp,sizeof(float));//将float转化为一个4个字节的char数组
int j = 0;
//将转化得到的char数组插入ptVal 数组的对应位置
while (j<sizeof(float))
{
ptVal[4*i+j] = m[j];
j++;
}
delete m;
}
2:将char数组转化为safeArray数组类型,然后转化为BLOB数组类型并导入数据库
输入:char数组 数组对应字节数blobSize 数据库中对应字段的位置iCol
功能:将char数组转化为二进制并插入到数据库中
具体代码:
long i, rtn;
char *pMove = NULL;
_variant_t vVal;
SAFEARRAYBOUND rgsabound[1];
SAFEARRAY *psa = NULL;
pMove = ptVal;
//1. 创建SAFEARRAY对象
rgsabound[0].lLbound = 0; //定义数组的下界
rgsabound[0].cElements = blobSize; //定义数组元素的大小
psa = SafeArrayCreate(VT_UI1,1,rgsabound);
for (i = 0; i < blobSize; i++)
{
if (FAILED(SafeArrayPutElement (psa, &i, pMove++)))
return (0);
}
//将数据存储为BLOB类型
vVal.vt = VT_ARRAY | VT_UI1;
vVal.parray = psa;
//将二进制数据加入到数据库
try
{
Fields *pFields = m_pRecordset-> GetFields();
Field *pField = pFields-> GetItem( iCol);
pField->AppendChunk(vVal);
// m_pRecordset->GetFields()->GetItem(iCol)->AppendChunk(vVal);
}
//捕捉错误
catch (_com_error &e)
{
AfxMessageBox(e.Description());
return(0);
}
return (1);
二:从数据库中取出数据
思路:从数据库中取出数据到一个char数组的缓冲区中,然后解码还原成float数组
1:从数据库中取出数据到缓冲区中
实现过程:
Fields *pFldS;
pFldS = m_pRecordset ->GetFields();
long lDataSize = pFldS->GetItem("Data")->ActualSize;
_variant_t num = pFldS ->GetItem("Num")->GetValue();
int n = num.intVal;
char *pBuf;
if(fp!=NULL) delete fp;
fp = new float[n];
float test;
if (lDataSize>0)
{
_variant_t val = pFldS->GetItem("Data")->GetChunk(lDataSize);
if (val.vt == (VT_ARRAY|VT_UI1))
{
pBuf = new char[lDataSize+1];
char *pMove = NULL;
SafeArrayAccessData(val.parray,(void **)&pMove);
memcpy(pBuf,pMove,lDataSize); //复制数据到缓冲区pBuf
SafeArrayUnaccessData(val.parray);
从数据库中取出数据到float数组中:
实现过程:
for(int i = 0; i<n; i++)
{
char *m = new char[4];
int j = 0;
while (j<4)
{
m[j] = pBuf[4*i+j] ;
j++;
}
memcpy(&test,m,4);
fp[i] = test;
delete m;
}
delete [] pBuf;
}
标签:
原文地址:http://www.cnblogs.com/cqhstyle/p/4777515.html