linux mysql图片的存储与提取

#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stdlib.h>
#include "mysql/mysql.h"


//定义mysql变量
MYSQL mysql;
MYSQL_RES *rs = NULL;
MYSQL_ROW row;



//连接数据库
int mysql_con()
{
const char *host = "localhost";
const char *user = "root";
const char *pass = "1006";
const char *db = "test";


mysql_init(&mysql);  //初始化

//连接数据库
if(mysql_real_connect(&mysql,host,user,pass,db,0,NULL,0))
{
return 1;
}
else
{
return 0;
}

}


//插入一张图片
int insert_pic(char *pFileName,char *pImageTableName,unsigned char ucIdFlag,int iId)
{
FILE *fp;
char szImageName[31];
char szImageData[1024 * 1000];   //图片大小最大不超过1M
char szStoreImageData[2 * 1024 * 1000 + 1];
char szSql[2 *  1024 * 1000 + 1];
unsigned long ulReadLength = 0; 
unsigned long ulStoreLength = 0;
int iRectCode = -1;

fp = fopen(pFileName,"rb");

if(NULL == fp)
{
fprintf(stderr,"This file:[%s] isn't exsit!\n",pFileName);
return EXIT_FAILURE;
}

memset(szImageData,0,sizeof(szImageData));
ulReadLength = fread(szImageData,1,1024 * 1000,fp);
fclose(fp);

if(!ulReadLength)
{
fprintf(stderr,"Read file fount error!\n");
return EXIT_FAILURE;
}

printf("ulReadLength = %ld\n",ulReadLength);

memset(szImageName,0,sizeof(szImageName));
memcpy(szImageName,pFileName,strlen(szImageName));
memset(szStoreImageData,0,sizeof(szStoreImageData));
ulStoreLength = mysql_real_escape_string(&mysql,szStoreImageData,szImageData,ulReadLength);


printf("ulStoreLength = %ld\n",ulStoreLength);

memset(szSql,0,sizeof(szSql));
if(1 == ucIdFlag)
{
sprintf(szSql,"insert into %s(id,name,data) values (%d,'%s','%s')",pImageTableName,iId,szImageName,szImageData);
}
else
{
sprintf(szSql,"insert into %s(name,data) values ('%s','%s')",pImageTableName,szImageName,szImageData);
}

iRectCode = mysql_query(&mysql,szSql);
if(iRectCode)
{
fprintf(stderr,"insert error,sqlcode = [%d]:%s!\n",mysql_errno(&mysql),mysql_error(&mysql));
return EXIT_FAILURE;
}

return EXIT_SUCCESS;
}




//从数据库中提取存储的图片
int read_pic(char *pFileName,char *pImageTableName,unsigned char ucFlag,int iId)
{
FILE *fp;

int iRectCode = -1;
int iTableRow = 0;
char szSql[256];
unsigned long *ulLength = NULL;
unsigned long ulWriteLength = 0;

//ucFlag = 1 表示指定文件名
memset(szSql,0,sizeof(szSql));
if(1 == ucFlag)
{
sprintf(szSql,"select data from %s where id = %d",pImageTableName,iId);
}
else
{
fprintf(stderr,"This flag [%d] found error for the filename",ucFlag);
return EXIT_FAILURE;
}

fp = fopen(pFileName,"wb");
if(NULL == fp)
{
fprintf(stderr,"This file:[%s] isn't exsit!\n",pFileName);
}

iRectCode = mysql_query(&mysql,szSql);
if(iRectCode)
{
fprintf(stderr,"select error %d!\n",mysql_errno(&mysql),mysql_error(&mysql));
return EXIT_FAILURE;
}

rs = mysql_store_result(&mysql);
if(rs)
{
iTableRow = mysql_num_rows(rs);

if(iTableRow == 0) //表示查询没有结果
{
fclose(fp);
fprintf(stderr,"select data from %s where id = [%d],result is null!\n",pImageTableName,iId);
return EXIT_FAILURE;
}

row = mysql_fetch_row(rs);
ulLength = mysql_fetch_lengths(rs);

printf("ulFetchedLength:%ld\n",ulLength[0]);  //从数据库中提取的数据信息长度

mysql_free_result(rs); //完成对数据的所有操作后,调用此函数来让MySQL库清理它分配的对象

ulWriteLength = fwrite(row[0],1,ulLength[0],fp);
if(ulWriteLength == 0)
{
fclose(fp);
fprintf(stderr,"Write file fount error!\n");
return EXIT_FAILURE;
}
printf("ulWriteLength = %ld\n",ulWriteLength);  //写入文件的数据信息长度
}
else
{
fclose(fp);
fprintf(stderr,"select result is null!\n");
return EXIT_FAILURE;
}
fclose(fp);
return EXIT_SUCCESS;
}


/*int main()
{
char szFileName[30];
char szTableName[30];

unsigned char ucIdFlag = 0;
int iRectCode = -1;
int iId = 0;


if(mysql_con())
{
printf("数据库连接成功!\n");
}
else
{
printf("数据库连接失败: %s\n", mysql_error(&mysql));
}

memset(szFileName,0,sizeof(szFileName));      
    memset(szTableName,0,sizeof(szTableName));    
    strcpy(szFileName,"/mnt/hgfs/linux/Sunrier.jpg");  
    strcpy(szTableName,"images");  
    ucIdFlag = 0;  
    iId =1;  
      
    iRectCode = insert_pic( szFileName,szTableName,ucIdFlag,iId );  
    //iRetCode = mysql_store_image_ex( szFileName,szTableName,ucIdFlag,iId );  
    if( !iRectCode )  
    {     
        fprintf(stderr,"Image has been stored in the database !\n");  
    }  

return 1;
}*/




int main()
{
char szFileName[30];
char szTableName[30];

unsigned char ucIdFlag = 0;
int iRectCode = -1;
int iId = 0;


if(mysql_con())
{
printf("数据库连接成功!\n");
}
else
{
printf("数据库连接失败: %s\n", mysql_error(&mysql));
}

ucIdFlag = 1;
iId = 1;

memset(szFileName,0,sizeof(szFileName));      
    memset(szTableName,0,sizeof(szTableName));    
    strcpy(szFileName,"/mnt/hgfs/linux/Sunrier.jpg");  
    strcpy(szTableName,"images"); 


iRectCode = read_pic(szFileName,szTableName,ucIdFlag,iId);  
    //iRetCode = mysql_fetch_image_ex(szFileName,szTableName,ucFlag,iId);  
    if( !iRectCode )  
    {     
        fprintf(stderr,"Image has been fetched from the database !\n");  
    }  
     

}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值