我需要将一个C ++对象作为BLOB存储到Mysql数据库中。以下是我的代码,
int MySqlDB::save(string name, TrackerFeatures features)
{
ofstream ofs("features.ros", ios::binary);
ofs.write((char*)&features, sizeof(features));
try{
sql::PreparedStatement *pstmt = con->prepareStatement("insert into faces(name,features) values(?,?)");
istream stream(ofs.rdbuf());
pstmt->setString(1, name);
pstmt->setBlob(2, &stream);
pstmt->executeUpdate();
} catch (sql::SQLException &e) {
cout << "# ERR: SQLException in " << __FILE__;
cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
cout << "# ERR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}
return EXIT_SUCCESS;
}
当我将数据传递给此函数时,我可以看到使用一些二进制数据创建的features.ros文件。此外,表中创建了行,但“features”列为空。不知道我错了什么。
答案 0 :(得分:0)
使用此原始缓冲区构造std :: istream对象时,std :: ofstream实例的原始缓冲区(名为ofs)已经为空。
但是,出于某种原因,存储给定对象的实际内存表示并不是一个好主意......相反,请考虑创建适当的持久化方法,为所需的类提供有效且可移植的表示。