#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"); } }