mysql connector c++版本:1.1.7
mysql版本:5.7.16
编译器:VS2008
class CDBBlobPacker : public streambuf
{
public:
CDBBlobPacker(char* pStrConext, uint32 nSize)
{
setg(pStrConext, pStrConext, pStrConext+nSize);
}
};
sql::Connection* m_pDBConnPtr;
sql::Driver* m_pDBDriverPtr;
sql::ResultSet* m_pDBResultPtr;
sql::PreparedStatement* m_pDBPrepStmt;
try{
m_pDBDriverPtr = get_driver_instance();
m_pDBConnPtr = m_pDBDriverPtr->connect("tcp://127.0.0.1:3306/xxx", "root", "xxxx");
m_pDBConnPtr->setAutoCommit(true);
std::string strSql = "insert into `tb_test`(id, testblob) value(?, ?);";
m_pDBPrepStmt = m_pDBConnPtr->prepareStatement(strSql.c_str());
m_pDBPrepStmt->setInt(1, 1);
char cblob1[128] = "12345678909876543211234567890";
CDBBlobPacker packblob(cblob1, 29);
std::istream blobs(&packblob);
m_pDBPrepStmt->setBlob(2, &blobs);
m_pDBPrepStmt->executeUpdate(); //执行此报错,若不setblob则插入数据正常
}catch(sql::SQLException& e)
{
std::cout << "SQLException:" << e.what() << " MySQL error code:" << e.getErrorCode() << std::endl;
mysql版本:5.7.16
编译器:VS2008
class CDBBlobPacker : public streambuf
{
public:
CDBBlobPacker(char* pStrConext, uint32 nSize)
{
setg(pStrConext, pStrConext, pStrConext+nSize);
}
};
sql::Connection* m_pDBConnPtr;
sql::Driver* m_pDBDriverPtr;
sql::ResultSet* m_pDBResultPtr;
sql::PreparedStatement* m_pDBPrepStmt;
try{
m_pDBDriverPtr = get_driver_instance();
m_pDBConnPtr = m_pDBDriverPtr->connect("tcp://127.0.0.1:3306/xxx", "root", "xxxx");
m_pDBConnPtr->setAutoCommit(true);
std::string strSql = "insert into `tb_test`(id, testblob) value(?, ?);";
m_pDBPrepStmt = m_pDBConnPtr->prepareStatement(strSql.c_str());
m_pDBPrepStmt->setInt(1, 1);
char cblob1[128] = "12345678909876543211234567890";
CDBBlobPacker packblob(cblob1, 29);
std::istream blobs(&packblob);
m_pDBPrepStmt->setBlob(2, &blobs);
m_pDBPrepStmt->executeUpdate(); //执行此报错,若不setblob则插入数据正常
}catch(sql::SQLException& e)
{
std::cout << "SQLException:" << e.what() << " MySQL error code:" << e.getErrorCode() << std::endl;
}
解决方案:
不要使用VS2008;在VS2012上编译调试通过!