欢迎投稿

今日深度:

使用sqlite保存图片和导出图片,sqlite保存图片导出

使用sqlite保存图片和导出图片,sqlite保存图片导出


本人在使用sqlite数据库时,使用c语言作为调用sqlite数据库的嵌入式语言,在调用的时候实现了对图片和视频的保存和调用。结果获得了成功。这是一个对blob类型的使用例子。

下面时本人的试验代码,已在本机运行通过。

 

 

#include<iostream>
#include<string>
#include"sqlite3.h"
using namespace std;
int main()
{
 sqlite3 *db;
 sqlite3_stmt *stat;
 char *zErrMsg = 0;
 char buffer2[1024]="0";
 int result;

 result = sqlite3_open("sqlite.db", &db);

 if(result)
 {
  cout<<"Open the database sqlite.db failed"<<endl;
 }

 else
  cout<<"Open the database sqlite.db sucessfully"<<endl;

 sqlite3_exec(db, "CREATE TABLE linhui (fliename varchar(128) UNIQUE, fzip blob);", 0, 0, &zErrMsg);


 //sqlite3_prepare()第一个参数跟前面一样,是个 sqlite3 * 类型变量,第二个参数是一个 sql 语句。这个 sql 
 //语句特别之处在于values 里面有个 ? 号。在sqlite3_prepare函数里,?号表示一个未定的值,它的值等下才插入。
 sqlite3_prepare(db, "insert into linhui values ('./images/5.bmp',?);", -1, &stat, 0);

 FILE *fp;
 long filesize = 0;
 char * ffile;
 fp = fopen("./images/5.bmp", "rb");
 if(fp != NULL)
 {
  fseek(fp, 0, SEEK_END);  //将fp指针退回到距离文件结尾0个字节处。
  filesize = ftell(fp);  //函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。
  fseek(fp, 0, SEEK_SET);   //将fp指针指到距离文件头0个字节处。
  ffile = new char[filesize+1];  //创建一个空间为dilesize大小的字符型数组。
  size_t sz = fread(ffile, sizeof(char), filesize+1, fp);   //将fp指针指向的文件读取filesize+1个大小的以char为元素单位大小,到ffile中。

  fclose(fp);   //关闭文件读取
 }


 //sqlite3_bind_blob()函数中。?号的索引。前面prepare的sql语句里有一个?号,假如有多个?号怎么插入?方法就是改变 bind_blob 函数第2个参数。
 //这个参数我写1,表示这里插入的值要替换 stat 的第一个?号(这里的索引从1开始计数,而非从0开始)。
 //如果你有多个?号,就写多个 bind_blob 语句,并改变它们的第2个参数就替换到不同的?号。如果有?号没有替换,sqlite为它取值null。
 //本函数是将图片保存到stat的表中。
 sqlite3_bind_blob(stat, 1, ffile, filesize, NULL); 

 sqlite3_step(stat);  //通过这个语句,stat 表示的sql语句就被写到了数据库里。
 sqlite3_prepare(db, "select * from linhui;", -1, &stat, 0);
 sqlite3_step(stat);
 const void * test = sqlite3_column_blob(stat, 1);
 int size = sqlite3_column_bytes(stat, 1);
 sprintf(buffer2, "%s", test);

 FILE *fp2;
 fp2 = fopen("4.bmp", "wb");
 if(fp2 != NULL)
 {
  size_t ret = fwrite(test, sizeof(char), size, fp2);  //将fp2的图片写进test中
  fclose(fp2);
 }
 delete(ffile);
 sqlite3_finalize(stat);
 sqlite3_close(db);
 return 0;
}

www.htsjk.Com true http://www.htsjk.com/SQLite/34789.html NewsArticle 使用sqlite保存图片和导出图片,sqlite保存图片导出 本人在使用sqlite数据库时,使用c语言作为调用sqlite数据库的嵌入式语言,在调用的时候实现了对图片和视频的保存和调用。结果获得...
相关文章
    暂无相关文章
评论暂时关闭