mysql存储blob,读取blob的问题

moonglow moonglow 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
用的是mysql++的库函数
以下是我写的两个存取blob和读取blob的函数
//存取基本没问题,用mysql-front可以看到存进去的图片
bool DBManager::saveFile(string srcfile,string tablename,string fieldname)
{
try {
Query query = m_conn->query();
ifstream In (srcfile.c_str(),ios::in | ios::binary);
if ((In.rdbuf())->is_open()) {
string sql="INSERT INTO "+tablename+" ("+fieldname+") VALUES(LOAD_FILE('"+srcfile+"'))";;
cout<<sql;
query.exec(sql);
}
else{
cerr << "Your file " << srcfile << "could not be open, errno = " << errno;
}
return true;
} catch (BadQuery er) {
cerr << "Error: " << er.error << " " << m_conn->errnum() << endl;
return false;
}

}
//读取的时候出问题了,图片读出来显示不出来,如果存取进去的是文本,可以读出来内存也一模一样,可是比较文件的大小,一个420byte的文本,读出来后变成450byte,不知道这是怎么回事
bool DBManager::getFile(string destfile,string tablename,string fieldname,string pkey,string value)
{
try {
Query query = m_conn->query();
query << "SELECT " << fieldname << " FROM " << tablename << " WHERE " << pkey << " = " << value;
cout<<query.preview();
ResUse res = query.use();
Row row=res.fetch_row();
long unsigned int *jj = res.fetch_lengths();
FILE *stream;
cout << "Content-length: " << *jj << endl << endl;
if( (stream = fopen( destfile.c_str(), "w" )) != NULL )
fwrite(row.raw_data(0),1,*jj,stream);
return true;
} catch (BadQuery er) {
cerr << "Error: " << er.error << " " << conn.errnum() << endl;
return false;
}
}

各位帮忙看一下,谢谢!
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
moonglow
MySQL 57,062 成员 56,759 内容