我有一个Insert函数,可以打开图像文件并插入数据库。
void insertBlob()
{
sql::Driver *driver;
sql::Connection *con;
sql::PreparedStatement *pstmt;
ifstream file ("/home/malper/NetBeansProjects/BlobTesting/2", ios::in | ios::binary | ios::ate);
ifstream::pos_type fileSize;
char* fileContents;
char buff[1024];
if(file.is_open())
{
fileSize = file.tellg();
fileContents = new char[fileSize];
file.seekg(0, ios::beg);
if(!file.read(fileContents, fileSize))
{
cout << "fail to read" << endl;
}
file.close();
}
istringstream str(fileContents);
/////////////////////////////////////////////////
/* Create a connection */
driver = get_driver_instance();
con = driver->connect("tcp://192.168.2.5:3306", "root", "root");
/* Connect to the MySQL test database */
con->setSchema("test");
pstmt=con->prepareStatement("INSERT INTO Dao VALUES(57,4,'2014-12-23 11:55:54',?,1,1)");
pstmt->setBlob(1,&str);
pstmt->executeUpdate();
}
数据库部分运行良好但我打开文件后无法将二进制图像转换为字符串流。如何在这个函数中将二进制文件存储在字符串中?
答案 0 :(得分:0)
std::stringstream constructor期望std :: string作为参数。这可以从filecontent:
进行std::string tempContent(fileContents, fileSize);
std::stringstream str(tempContent);
它仍然感觉很奇怪,因为字符串不能处理二进制数据。
答案 1 :(得分:0)