SQLite存取二进制数据

前端之家收集整理的这篇文章主要介绍了SQLite存取二进制数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
程序功能: 使用sqlite的C API操作sqlite数据库,存取二进制数据.
用来测试的文件都小于65535字节,没有测试更大的文件!
参考文档: http://www.cntxk.com/Catanews/56/info8106.html
编译环境: codeblock 10.05(svn 6906)
*/
#include <stdio.h>
#include <memory.h>
#include <sqlite3.h>

int main(int argc,char *argv[])
{
sqlite3* pDB=NULL;
char* pErrMsg;

if(sqlITE_OK==sqlite3_open("./mydb.db",&pDB))
{
sqlite3_exec(pDB,"create table bList(fileName varchar(16) primary key,binData blob);",NULL,&pErrMsg);
{
char buffer[65535];
int iLen=0;
sqlite3_stmt* stmt;

{//存储二进制数据
unsigned char hex[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
sqlite3_prepare(pDB,"insert into bList values ('hex',?);",-1,&stmt,NULL);
sqlite3_bind_blob(stmt,hex,16,NULL);
sqlite3_step(stmt);
}

stmt=NULL;
{//存储exe文件
memset(buffer,65535);
{
FILE* fp=fopen(argv[0],"rb");
iLen=fread(buffer,65535,fp);
fclose(fp);
}
sqlite3_prepare(pDB,"insert into bList values ('me.exe',buffer,iLen,NULL);
sqlite3_step(stmt);
}

stmt=NULL;
{//存储普通c文档
memset(buffer,65535);
{
FILE* fp=fopen("../main.c","insert into bList values ('main.txt',NULL);
sqlite3_step(stmt);
}
stmt=NULL;
{//从数据库中读取txt文件数据
char *data=NULL;
memset(buffer,65535);
sqlite3_prepare(pDB,"select binData from bList where fileName='main.txt';",0);
sqlite3_step(stmt);
data= (char *)sqlite3_column_blob(stmt,0);//得到纪录中的BLOB字段
iLen= sqlite3_column_bytes(stmt,0);//得到字段中数据的长度
memmove(buffer,data,iLen);
printf("%s\n",buffer);
}
}
sqlite3_close(pDB);
}

{
puts("Press any key to exit...");
getchar();
}
return 0;
}


From:

http://hi.baidu.com/ejoywx/blog/item/4d7b418c8677cc00b31bbae9.html
原文链接:https://www.f2er.com/sqlite/201313.html

猜你在找的Sqlite相关文章