C ++在Mysql中将自定义对象存储为blob

时间:2014-09-10 18:09:23

标签: c++ mysql blob mysql-connector

我需要将一个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”列为空。不知道我错了什么。

1 个答案:

答案 0 :(得分:0)

使用此原始缓冲区构造std :: istream对象时,std :: ofstream实例的原始缓冲区(名为ofs)已经为空。

但是,出于某种原因,存储给定对象的实际内存表示并不是一个好主意......相反,请考虑创建适当的持久化方法,为所需的类提供有效且可移植的表示。