用C ++读取二进制数据并写入MySQL

时间:2014-01-20 13:09:26

标签: c++ mysql file binary blob

我有一个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();

}

数据库部分运行良好但我打开文件后无法将二进制图像转换为字符串流。如何在这个函数中将二进制文件存储在字符串中?

2 个答案:

答案 0 :(得分:0)

std::stringstream constructor期望std :: string作为参数。这可以从filecontent:

进行
std::string tempContent(fileContents, fileSize);
std::stringstream str(tempContent);

它仍然感觉很奇怪,因为字符串不能处理二进制数据。

答案 1 :(得分:0)

您需要的是二进制数据的ASCII表示。

幸运的是,您不需要进行一次,Base64是标准格式。

可以轻松获得从Base64来回转换数据的解决方案: This应该是一个好的开始。